微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决试图从文本文件中读取两个数字

我正在尝试从文本文件中读取两个数字。我使用了 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",&n,&end) != 2) {
     // if more characters exist on the line
     // the return value of sscanf will be 3
 }

如果文件中的值可能超出 int 的范围,请考虑使用 strtol 而不是 sscanf

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。