【问题标题】:Don't print the last character: print only after the next input不打印最后一个字符:仅在下一次输入后打印
【发布时间】:2021-07-03 03:35:33
【问题描述】:

我有一个问题,当我尝试打印输入时,程序没有打印最后一个字符串(在本例中为 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\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);
  • 是的,使用 {\n} 可以,但我不知道:模式是否正确?还是想绕过问题?
  • fflush 是正确的方法
  • 好的,谢谢两位!

标签: c buffering


【解决方案1】:

您的系统的缓冲设置为行缓冲,当遇到换行符时,字符从缓冲区作为块传输。使用\n 是完全有效的,但它有打印换行符的副作用,还有其他选项,即:

  • printf 之后使用fflush(stdout) 将不顾一切地刷新缓冲区,您将不需要\n

  • 您可以将缓冲模式更改为无缓冲,每个输出都会尽快写入。同样,不需要\n

    setvbuf(stdout, NULL, _IONBF, 0);
    

【讨论】:

  • 好的,谢谢!我不知道 { \n } 是否有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多