gpt4 book ai didi

C : File redirection is not working

转载 作者:行者123 更新时间:2023-11-30 19:40:53 25 4
gpt4 key购买 nike

我正在尝试在下面的 C 程序中执行简单的 scanfprintf:

  1. 获取用户输入
  2. 检查用户输入是否正确,如果正确则打印出来,否则显示错误消息

这是代码:

#include <stdio.h>

int main() {
int latitude;
int scanfout;
int started = 1;

puts("enter the value:");

while (started == 1) {
scanfout = scanf("%d", &latitude);
if (scanfout == 1) {
printf("%d\n", latitude);
printf("ok return code:%d\n", scanfout);
puts("\n");
} else {
puts("value not a valid one");
printf("not ok return code:%d\n", scanfout);
}
fflush(stdin);
}
return 0;
}

尝试在命令终端上编译并运行它,程序可以工作。 命令行输出:

enter the value:
1
1
ok returncode:1

0
0
ok returncode:1

122.22
122
ok returncode:1

sad
value not a valid one
not ok returncode:0

如您所见,该程序只是扫描用户输入并将其打印出来,它在命令行中工作正常,但是当它尝试将输入重定向到文本文件时,请说:

test < in.txt

程序无法运行,else 部分中的打印语句会无限循环地继续打印。文本文件 in.txt 包含单个值 12,程序不会打印 12,而是简单地进入无限循环并打印:

value not a valid one
not ok returncode:0
value not a valid one
not ok returncode:0
value not a valid one
not ok returncode:0
value not a valid one
not ok returncode:0

有人可以帮我解决这个问题吗?代码是否正确,为什么它可以在命令行工作以及为什么文件重定向不起作用?帮助将不胜感激...

最佳答案

您不测试文件结尾:扫描输入文件后,程序会进入无限循环,因为 scanf 返回 -1,程序会提示并重试。

顺便说一句,如果输入文件中存在无法转换为 int 的数据,程序将永远循环尝试重新解析相同的输入,但徒劳无功。

请注意,C 标准中未指定 fflush(stdin);,它可能会或可能不会执行您期望的操作,尤其是在文件中。

这是更正后的版本:

#include <stdio.h>

int main() {
int latitude, scanfout, c;

puts("enter the value:");

for (;;) {
scanfout = scanf("%d", &latitude);
if (scanfout == 1) {
printf("%d\n", latitude);
printf("ok return code:%d\n", scanfout);
puts("\n");
} else
if (scanfout < 0) {
break; // End of file
} else {
puts("value not a valid one");
printf("not ok return code:%d\n", scanfout);
}
/* read and ignore the rest of the line */
while ((c = getchar()) != EOF && c != '\n')
continue;
}
return 0;
}

关于C : File redirection is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324072/

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