【发布时间】:2015-11-18 22:41:57
【问题描述】:
我目前正在尝试让这段代码正常工作:
//TODO THIS IS NOT WORKING
printf("WARNING: THE USER INPUT WILL OVERWRITE THE FILE \"%s\". ARE YOU SURE? [Y/N] ", output_file_name);
int c;
while(read(0, &c, 1) == 1) {
if (((unsigned char) c) == 'y')
printf("YES");
}
我期望代码做什么: 我期待得到文本
警告:用户输入将覆盖文件“文件名”。你确定吗? [是/否]
在命令行中打印。为了能够写点东西,在按下 enter 之后,我希望看到文本 YES 打印的次数与前面给出的 'y's 一样多输入。相反,这就是我得到的:
./myprogram.o
I type things.
Including yyyy
ydkfasjf
yay
Now I'm tired and will press ctrl+d to write EOF to stdin...
WARNING: THE USER INPUT WILL OVERWRITE THE FILE "FILENAME". ARE YOU SURE? [Y/N]YESYESYESYESYESYESYESYES
Matthias@BASH ~/folder/
这里发生了什么?我认为 printf 和 read 函数会以某种方式发生冲突...有人可以赐教吗?
【问题讨论】:
-
fflush(stdout);在第一个printf()之后? -
int c;-->char c -
我认为嵌入式 ARM 设备(例如智能手机)比 x86 类 PC 更多。在任何情况下,这都不是破坏代码的理由
-
我计算的 YES 与输入中的 y 一样多。似乎它正在做它应该做的事情。不确定在此之前的代码是什么,但大部分输入都以读取命令结束,该命令将循环直到到达 EOF。
-
@Test,没有人建议
fflush(stdin)。建议使用fflush(stdout)。 (注意细节)见comment