gpt4 book ai didi

C printf/read 冲突

转载 作者:行者123 更新时间:2023-11-30 17:08:12 25 4
gpt4 key购买 nike

我目前正在尝试让这段代码正常工作:

//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");
}

我期望代码做什么:我期待收到短信

警告:用户输入将覆盖文件“FILENAME”。你确定吗? [是/否]

在命令行中打印。为了能够写一些东西,在按 enter 后,我希望看到文本 YES 打印与前面给定的“y”一样多的次数输入。相反,这就是我得到的:

./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 函数在某种程度上发生了冲突......有人可以启发我吗?

最佳答案

stdout 通常是 缓冲的。要强制输出在下一行代码之前发生,请将 '\n' 添加到输出或使用 fflush(stdout)

同时将 int c 更改为 char c 以正确将数据读取到 c 中。

printf("WARNING: THE USER INPUT WILL OVERWRITE THE FILE \"%s\". ARE YOU SURE? [Y/N] ", 
output_file_name);
fflush(stdout); // *****
// int c;
char c;

while(read(0, &c, 1) == 1) {
if (((unsigned char) c) == 'y') {
printf("YES");
fflush(stdout); // *****
]
}

关于C printf/read 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33791865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com