Don't print the last character:仅在下一次输入后打印
Don't print the last character: print only after the next input
我有一个问题,当我尝试打印输入时,程序没有打印最后一个字符串(在本例中 var_quantita
)。
但是,如果我添加一个 \n
,或者如果我从 stdin
发送另一个命令,它会起作用。
所以我认为问题与最后一个字符串有关,但我不确定。
我的代码:
uint32_t var_quantita;
uint8_t var_tipo[BUF_SIZE];
//...
memset(com_par, 0, BUF_SIZE);
memset(comando, 0, BUF_SIZE);
memset(arg2, 0, BUF_SIZE);
memset(arg3, 0, BUF_SIZE);
memset(arg4, 0, BUF_SIZE);
//prendo in ingresso il comando e i parametri
fgets(com_par, BUF_SIZE, stdin);
sscanf(com_par, "%s %s %s %s", comando, arg2, arg3, arg4);
printf("Argomenti inviati:%s %s %s %s \n", comando, arg2, arg3, arg4);
//......
if(strcmp(comando, "add[=10=]") == 0){
strcpy(var_tipo, arg2);
var_quantita = atoi(arg3);
printf("Tipo:%s\nQuantita:%d", var_tipo, var_quantita);
}//fine if(add)
您的系统缓冲设置为行缓冲,当遇到换行符时,字符作为块从缓冲区传输。使用 \n
是完全有效的,但它也有打印换行符的副作用,还有其他选项,即:
在 printf
之后使用 fflush(stdout)
将刷新缓冲区,您不需要 \n
.
您可以将缓冲模式更改为无缓冲,尽快写入每个输出。同样,不需要 \n
。
setvbuf(stdout, NULL, _IONBF, 0);
我有一个问题,当我尝试打印输入时,程序没有打印最后一个字符串(在本例中 var_quantita
)。
但是,如果我添加一个 \n
,或者如果我从 stdin
发送另一个命令,它会起作用。
所以我认为问题与最后一个字符串有关,但我不确定。
我的代码:
uint32_t var_quantita;
uint8_t var_tipo[BUF_SIZE];
//...
memset(com_par, 0, BUF_SIZE);
memset(comando, 0, BUF_SIZE);
memset(arg2, 0, BUF_SIZE);
memset(arg3, 0, BUF_SIZE);
memset(arg4, 0, BUF_SIZE);
//prendo in ingresso il comando e i parametri
fgets(com_par, BUF_SIZE, stdin);
sscanf(com_par, "%s %s %s %s", comando, arg2, arg3, arg4);
printf("Argomenti inviati:%s %s %s %s \n", comando, arg2, arg3, arg4);
//......
if(strcmp(comando, "add[=10=]") == 0){
strcpy(var_tipo, arg2);
var_quantita = atoi(arg3);
printf("Tipo:%s\nQuantita:%d", var_tipo, var_quantita);
}//fine if(add)
您的系统缓冲设置为行缓冲,当遇到换行符时,字符作为块从缓冲区传输。使用 \n
是完全有效的,但它也有打印换行符的副作用,还有其他选项,即:
在
printf
之后使用fflush(stdout)
将刷新缓冲区,您不需要\n
.您可以将缓冲模式更改为无缓冲,尽快写入每个输出。同样,不需要
\n
。setvbuf(stdout, NULL, _IONBF, 0);