我使用文件作为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/