gpt4 book ai didi

c - 试图从文本文件中读取两个数字

转载 作者:行者123 更新时间:2023-12-04 03:29:04 24 4
gpt4 key购买 nike

我正在尝试从文本文件中读取两个数字。我使用了 strtok ,分隔符是 " " 。文本文件(名为 data.txt)文件只有两个数字,行是 "3 5" 。但是程序崩溃了......任何帮助表示赞赏。

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

int main(){

FILE *data;
data = fopen("data.txt", "r");

int m, n;
char *line, *number;
while(!feof(data))
{
fscanf(data, "%s", line);
number = strtok(line, " ");
m = atoi(number);
number = strtok(NULL, " ");
n = atoi(number);
}
}

最佳答案

line 是一个未初始化的指针,它不指向任何有效的内存位置,所以你不能用它来存储数据,而是使用数组。while(!feof(data)) is not what you'd want to use 来控制你的阅读周期。
使用 fgets/sscanf 解析值,简单易行的方法:

FILE *data;
data = fopen("data.txt", "r");
int m, n;
char line[32];

if (data != NULL)
{
while (fgets(line, sizeof line, data)) // assuming that you want to have more lines
{
if(sscanf(line, "%d%d", &m, &n) != 2){
// values not parsed correctly
//handle parsing error
}
}
}
或者作为 @chux pointed out ,检测线路上的额外垃圾:
 char end;  
if(sscanf(line, "%d%d %c", &m, &n, &end) != 2) {
// if more characters exist on the line
// the return value of sscanf will be 3
}
如果文件中的值可能超出 int 的范围,请考虑使用 strtol 而不是 sscanf

关于c - 试图从文本文件中读取两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67200294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com