【问题标题】:fscanf reading newline characterfscanf 读取换行符
【发布时间】:2011-09-15 17:16:20
【问题描述】:

我一直在慢慢追踪我的程序错误。我已经把它缩小到这个。 我有一个用户输入

fscanf(stdin, "%c %c %d", &car, &dir, &amount);

我第一次访问它时工作正常,可以正确读取值。在循环中的第二次,它将\n 读入 car 而不是我给它的字符。然后它将应该在汽车中的内容读入目录。金额读取正确。当汽车被传递给其他函数进行计数时,我最终会遇到段错误。

它是从上一行读取 \n 还是什么?

【问题讨论】:

  • 是的,它似乎正在这样做。

标签: c scanf


【解决方案1】:

"%c" 转换说明符不执行通常的空白修剪。
尝试在第一个转换说明符之前添加一个空格

if (fscanf(stdin, " %c %c %d", &var, &dir, &amount) != 3) { /* error */ }

或者,也许更好,读一整行并在你的程序中解析它

char buf[1000];
fgets(buf, sizeof buf, stdin);
parse(buf);

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 2012-10-24
    • 1970-01-01
    • 2018-03-21
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多