C : File redirection is not working

标签 c file printf scanf

我正在尝试在下面的 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/

相关文章:

c - 在 C 中,LARGE_INTEGER.QuadPart 在 printf 中捕获两次

c - 读入短语并过滤掉字符以查找数字 C

c - C 中的指针与类型转换

c - 在 C 中,我可以将字符串保留为 char*,然后使用指针指向其他字符串吗?

从 ‘int’ 转换为 ‘float’ 可能会改变它的值

c - 关闭文件时 feof() 的返回值是多少?

java - rundll32 相当于在 Linux 平台中打开和查看文件

c - __func__ 标识符如何构成安全风险?

java - InputstreamReader 只读取一行?

string - 如何 fmt.Printf 带有千位逗号的整数