我想执行以下操作:
N
。0 <= i < N
的文件行,并将它们存储在一个数组中以便稍后对其进行排序。注意:如果N == 0
则应退出。
这是我的代码:
FILE *f = fopen(argv[1], "r");
while (true)
{
fgets (mystring , 100 , f);
cout << mystring;
fseek(f, 1, SEEK_CUR);
N = atoi(mystring);
if (N == 0)
{
cout << "\n Exit";
exit(0);
}
for (i = 0; i < N; i++)
{
bzero(mystring, sizeof(mystring));
fgets (mystring , 100 , f);
fseek(f, 1, SEEK_CUR);
a[i] = atoi(mystring);
cout << a[i];
}
}
它正确读取第一个文件(包含N
),但随后它将文件读作00000000000
,以便N的下一个值变为0
并退出循环。
这是我的输入文件:
10
1
2
3
4
5
6
7
5
3
3
5
1
2
5
5
6
0
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
知道了!
删除额外的fseek(f, 1, SEEK_CUR);
每个fgets()
读取包含新行的行。
所以文件指针指向新行的开头。
您的fseek
将指针移动到下一个字符,即新行字符\n
)。
空字符串的atoi()
返回0.
将提供帮助。
现在,你做的一件小事是正确的。如果您的mystring
被声明为char mystring[100]
,则在您致电fgets
的每个地方,将100
更改为sizeof(mystring)
。这更正确。
我不明白为什么你会有这么多的负面因素。我正在提出你的问题。