我正在从文本文件中读取15个数字,每个数字都在一个新行中:
1 2 3 4 5 10 12 13 14 15 21 22 23 24 26
从代码中可以看出,我需要验证数字,因此它们小于26,否则终止程序。
目前我只在将其插入数组(numArray)后进行验证。是否有更简洁的方法(在插入阵列之前验证)?
问题是,我似乎无法在正在阅读的文本文件中获得实际的行。这就是我使用数组(int x = numArray [i];)上的循环索引验证它的原因。
感谢任何帮助,我对C编程很陌生。感谢。
FILE *myFile = fopen(dataset.txt, "r");
int numArray[15];
if (myFile != NULL) {
for (int i = 0; i < sizeof(numArray); i++)
{
//insert int to array
fscanf(myFile, "%d", &numArray[i]);
//Validate number
int x = numArray[i];
if (x > 25) {
printf("Invalid number found, closing application...");
exit(0);
}
}
//close file
fclose(myFile);
}
else {
//Error opening file
printf("File cannot be opened!");
}
答案 0 :(得分:1)
当然,您可以将其存储在局部变量中,并仅在有效时分配。但是,如果您在调用exit(0)
时无效则不会改变任何内容。我想你想从循环中break
。
BTW你的循环错了。你必须将sizeof(numArray)
除以一个元素的大小,否则你将循环太多次,如果你的输入文件中有太多数字,你就会崩溃机器(是的,我还为末尾添加了一个测试-of-文件)
if (myFile != NULL) {
for (int i = 0; i < sizeof(numArray)/sizeof(numArray[0]); i++)
{
int x;
//insert int to array
if (fscanf(myFile, "%d", &x)==0)
{
printf("Invalid number found / end of file, closing application...\n");
exit(0); // end of file / not a number: stop
}
//Validate number
if (x > 25) {
printf("Invalid number found, closing application...\n");
exit(0);
}
numArray[i] = x;
}
//close file
fclose(myFile);
}