如何解决不打印最后一个字符:仅在下一个输入后打印
我遇到一个问题,当我尝试打印输入时,程序不会打印最后一个字符串(在本例中为 var_quantita
)。
但是如果我添加一个 \n
,或者如果我从 stdin
发送另一个命令,它会起作用。
所以我认为问题与最后一个字符串有关,但我不确定。
我的代码:
uint32_t var_quantita;
uint8_t var_tipo[BUF_SIZE];
//...
memset(com_par,BUF_SIZE);
memset(comando,BUF_SIZE);
memset(arg2,BUF_SIZE);
memset(arg3,BUF_SIZE);
memset(arg4,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",arg4);
//......
if(strcmp(comando,"add\0") == 0){
strcpy(var_tipo,arg2);
var_quantita = atoi(arg3);
printf("Tipo:%s\nQuantita:%d",var_tipo,var_quantita);
}//fine if(add)
解决方法
您系统的缓冲设置为行缓冲,当遇到换行符时,字符作为一个块从缓冲区传输。使用 \n
是完全有效的,但它也有打印换行符的副作用,还有其他选项,即:
-
在
fflush(stdout)
之后使用printf
将刷新缓冲区,无需考虑\n
。 -
您可以将缓冲模式更改为无缓冲,尽快写入每个输出。同样,不需要
\n
。setvbuf(stdout,NULL,_IONBF,0);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。