c++ - 当我使用文件作为 C++ 程序的输入时,它会损坏

标签 c++ c

我使用文件作为c++程序的输入,并且输入不完整。当我将结果输出到另一个文件时,遇到了一些问题。 由于未完成的输入,我认为程序会在程序结束后关闭,但事实并非如此。它继续运行并陷入永无止境的循环。

这是程序的源代码:

#include <stdio.h>

int main()
{
    while(1) {
        int n,i,j;
        int a[100][100]={0};
        int row[100]={0};
        int col[100]={0};
        scanf("%d",&n);
        if (n==0) break;
        int numr=0,numc=0,cr=0,cc=0;
        for (i=0;i<n;i++) {
            for (j=0;j<n;j++) {
                scanf("%d",&a[i][j]);
                row[i]=row[i]+a[i][j];
            }
            if (row[i]%2!=0) {numr++; cr=i;}
        }
        for (j=0;j<n;j++) {
            for (i=0;i<n;i++) col[j]=col[j]+a[i][j];
            if (col[j]%2!=0) {numc++; cc=j;}
        }
        if ((numr==0)&&(numc==0)) printf("OK\n");
        else if ((numr==1)&&(numc==1)) printf("Change bit (%d,%d)\n",cr+1,cc+1);
        else printf("Corrupt\n");
    }
}

我使用 g++ commond 来编译该文件

g++ testid.cpp -o testid 

输入文件是:

99
0 0 1 1 1 1 0 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 0 1 1 0 0 0 1 0 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0

我运行程序:

./testid < sample.in > out

它陷入了永无休止的循环。 输出文件如下所示:

Corrupt
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK

但我希望结果为空,因为我还没有完成输入。 什么是问题?它是如何工作的?

最佳答案

使用 while(1),您创建了一个无限循环。

而不是else printf("Corrupt\n"); 尝试

else {
 printf("Corrupt\n");
 break ;
}

注意:为了澄清,您继续循环并调用 scanf 而没有任何输入,导致 i == 0 且 numr == 0 且 numc == 0

您可能还想在成功时编写退出语句,但这不是您问的问题。

关于c++ - 当我使用文件作为 C++ 程序的输入时,它会损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758332/

相关文章:

c++:什么是显式实例化

c++ - 查找数组中最大的分数

c - 字符串终止 C/C++ char = 0

c++ - C: union 实际用在什么地方?

c++ - 为什么作用域枚举默认支持运算符 '<'?

c++ - 为什么我可以将 Int 分配给 String 而不会出现编译器错误?

c++ - 通过 C++ 中的另一个结构成员访问结构

c++ - 在 linux 中将 "plugins"放在哪里

c - 如何在 C 中创建自定义头文件并在程序中使用它

逐字符复制一行文件