C - Windows 输入重定向与 getchar 不起作用?

标签 c windows redirect getchar

我有一个简单的 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 正在对该程序进行沙箱处理。因此,将程序放入“安全文件”列表后,一切都正常工作。 我希望这个解决方案能够帮助任何遇到类似问题的人。

最佳答案

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

关于C - Windows 输入重定向与 getchar 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029008/

相关文章:

apache - 使用 .htaccess 使用 SSL 将 domain.com 重定向到 www.domain.com

c - 如何引用在 .h 文件中初始化的二维数组并在 .c 函数中使用它?

c++ - 文件内加密文件系统

c - 注意: expected 'char *' but argument is of type 'int *'

.net - 关机时 Tomcat 锁定

linux - Windows 中的 stty 等价物

c++ - 如何将标准输出重定向到标准错误

c - 是否必须将未定义的行为定义为未定义?

windows - 从命令行转到 Atom 编辑器中的行

javascript - 规避asp事件处理程序