首页 > 解决方案 > 在while循环C之外访问变量

问题描述

我对C很陌生,所以请原谅这个愚蠢的问题。我有以下代码,它从文本文件中读取第 3 行,即数字 38。我将其分配给 while 循环内的一个 int,但是,在 while 循环外访问此变量时,我得到了不同的结果。这是我的代码:

int main() {

    FILE* file = fopen("blocks.txt", "r");
    char line[256];
    int number;
    int i = 0;
    while (fgets(line, sizeof(line), file)) {
        i++;
        if (i == 3)
        {
            number = line;

            //prints 38
            printf("%s", line);
        }
    }
    //prints something random!
    printf("%d", number);
    fclose(file);
    getchar();
    return 0;
}

对不起,如果这是模糊的,它可能会被删除,但请给我一些帮助哈哈!

标签: cvariableswhile-loop

解决方案


即使在第一次打印之后,您的 while 循环也会继续运行。并且char数组line在行中不断更新gets(line, sizeof(line), file)

#include <stdio.h>
#include <stdlib.h>

int main()
{

    FILE *file = fopen("blocks.txt", "r");
    char line[256];
    long int number;
    int i = 0;
    char *stopped;

    /*keeps updating line till fget returns a failed response*/
    while (fgets(line, sizeof(line), file))
    {
        i++;
        if (i == 3)
        {
            number = (int)strtol(line, &stopped, 10);
            if (!*stopped)
            { /* handle error */
                printf("Error in strtol\n");
                return -1;
            }
            //prints 38
            printf("%s", line);
        }
    }
    /*Once the while loop ends it will have the last 
    line of the file block.txt*/
    printf("%ld", number);
    fclose(file);
    getchar();
    return 0;
}

atoi 的警告

我们可以使用atoi。但是atoi不安全,并且可能导致许多粗心的错误。见链接。您应该使用strtolwhich 将字符串转换为long int.


推荐阅读