c - 在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;
}
对不起,如果这是模糊的,它可能会被删除,但请给我一些帮助哈哈!
解决方案
即使在第一次打印之后,您的 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
不安全,并且可能导致许多粗心的错误。见链接。您应该使用strtol
which 将字符串转换为long int
.
推荐阅读
- r - 如何将观察结果转化为变量并根据变量条件总结每个值
- kubernetes - Github 操作:使用 kubectl 创建命名空间以部署构建
- neo4j - Liquigraph 模式文件丢失?
- reactjs - 无法从嵌套的 JSON 文件中为反应状态分配值
- amazon-web-services - 从组织中删除时如何删除 AWS 子账户?
- java - DateFormat 模式“dd/MM/yyyy”接受错误的月份
- python - 将列添加到从主数据框派生的数据框会导致添加的列添加到从主数据框派生的其他数据框
- python-3.x - 获取封闭函数的所有属性
- forms - Bluebeam:添加日期/时间戳按钮
- pandas - 在 jupyter 中出现 plotly 错误:ReferenceError: Plotly 未定义