【问题标题】:C - Windows input redirection with getchar not working?C - 使用 getchar 的 Windows 输入重定向不起作用?
【发布时间】:2013-11-17 09:06:50
【问题描述】:

我有一个简单的 C 程序,它从标准输入中读取字符并显示一个表格,其中包含我们编写的字符的编号行和列。 代码是:

#include <stdio.h>

#define COLS 6
#define WIDTH 5

int main(int argc, char *argv[]){

char buffer[COLS]={0};

int c;
int cols;
for(cols=0;cols<COLS && (c=getchar())!=EOF;cols++){
    buffer[cols]=c;
}
if(cols!=0){
    int a;
    printf("%-*s",WIDTH,"");
    for(a=0;a<cols;a++){
        (cols!=(a+1)) ? printf("%-*d",WIDTH,(a+1)) : printf("%-*d\n",WIDTH,(a+1));
    }
    printf("%-*d",WIDTH,1);
    for(a=0;a<cols;a++){
        (cols!=(a+1)) ? printf("%-*c",WIDTH,buffer[a]) : printf("%-*c\n",WIDTH,buffer[a]);
    }

    cols=0;
    int rows=2;
    while((c=getchar())!=EOF){
        if(cols==0){
            printf("%-*d%-*c",WIDTH,rows,WIDTH,c);
            cols++;
        }
        else{
            if(COLS!=(cols+1)){
                printf("%-*c%",WIDTH,c);
                cols++;
            }
            else{
                printf("%-*c\n",WIDTH,c);
                cols=0;
                rows++;
            }
        }
    }
    printf("End-Of-File\n");
}
else{
    printf("No valid characters input\n");
}


return 0;
}

我在 Windows XP 上使用 cc 编译程序,如果在 Windows 控制台 (cmd) 中执行它:

program.exe

然后它会读取我用键盘输入的字符。它工作正常。 当我决定从 txt 文件中读取字符时,就会出现问题。所以我用记事本创建了一个txt文件(在program.exe的同一个文件夹中),我在里面写了几句话。然后在控制台中执行:

program.exe<file.txt

但我收到的输出是“没有有效字符输入”,就好像程序读取的第一个字符是 EOF。

有什么想法吗?

谢谢。

解决方案:我刚刚发现了问题所在。 Comodo Internet Security 阻止程序从 txt 文件中读取字符。实际上,Comodo 正在对程序进行沙盒处理。因此,将程序放入“安全文件”列表后,一切正常。 我希望这个解决方案能帮助任何有类似问题的人。

【问题讨论】:

  • 我想你想打电话给program.exe 0&lt;file.txt
  • 和以前一样的输出。
  • 我要修复的第一件事是c 的类型,这是错误的。 getchar() 返回一个 int;不是char,如果您追查 EOF 是什么,这很重要。 c 也应该是 int。我还将您的argv 参数修复为main,这是错误的;它应该是char *argv[],而不是char argv[]
  • @condorwasabi 来自here,看起来我们的两个命令应该都有效。测试 sort 命令并以两种方式正确重定向..
  • 用解决方案编辑了问题。谢谢你的建议。正如 WhozCraig 正确指出的那样,我还更新了代码。

标签: c windows redirect getchar


【解决方案1】:

解决方案:我刚刚发现了问题所在。 Comodo Internet Security 阻止程序从 txt 文件中读取字符。实际上,Comodo 正在对程序进行沙盒处理。因此,将程序放入“安全文件”列表后,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2012-08-22
    • 2020-04-16
    相关资源
    最近更新 更多