我正在从一个文本文件中读取15个数字,每个数字在一个新的行:
<>之前123.4510121314152122232426之前从代码中可以看到,我需要验证这些数字,使它们小于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!");
}
当然,您可以将其存储在局部变量中,并仅在有效的情况下进行赋值。但是如果你调用exit(0)
无效它不会改变任何东西。我猜你想从循环中取出break
。
顺便说一句,你的循环是错误的。你必须将sizeof(numArray)
除以一个元素的大小,否则你将循环太多次,如果输入文件中有太多数字,你将崩溃机器(是的,我还添加了一个测试文件结束)
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);
}