C程序 - 验证从文本文件中读取的数字

时间:2016-10-07 19:58:18

标签: c validation scanf file-read procedural-programming

我正在从文本文件中读取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!");
}

1 个答案:

答案 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); 
}