C语言 关于从数组中阅读int和String的问题

zpqajqem  于 2022-12-29  发布在  其他
关注(0)|答案(2)|浏览(129)

我有一个二维数组,其中包含了来自一个文件的输入,我想把数组中的整数和字符串赋给不同的变量;整数设置正确,但字符串不起作用。
输入如下:

(1,2) apple 2 3 north

但所有的信息都在里面

char data[MAX_LINES][MAX_LEN];

我正在尝试使用sscanf赋值:

sscanf(data[i],"(%d,%d) %8s %d %d %8s",&x,&y,type,&age,&hun,direction);

忽略无关代码的代码结构

FILE *in_file = fopen(fileName,"r");
    char data[MAX_LINES][MAX_LEN];
    int x,y,age,hun;
    char type[10];
    char deriction[20];
    if(! in_file){
        printf("cannot read file\n");
        exit(1);
    }
    int line=0;
    while(!feof(in_file) && !ferror(in_file)){
        if(fgets(data[line],MAX_LEN,in_file) !=NULL ){
            char *check = strtok(data[line],d);
            
            line++;
        }
    }
    fclose(in_file);
    for(int i = 9; i<14;i++){
        sscanf(data[i],"(%d,%d) %8s %d %d %8s",&x,&y,type,&age,&hun,deriction);
}
wfveoks0

wfveoks01#

#include <stdio.h>
int main(){
    //Data:
    char data[1][100] = {"(1,2) apple 2 3 north"};
    
    //Define variables:
    int x, y, age, hun;
    char type[10], direction[10];
    
    sscanf(data[0], "(%d,%d) %s %d %d %s", &x, &y, type, &age, &hun, direction);

    //Check by printing it out:
    printf("(%d,%d) %s %d %d %s\n", x, y, type, age, hun, direction);
    printf("x: %d\ny: %d\ntype: %s\nage: %d\nhun: %d\ndirection: %s", x, y, type, age, hun, direction);

    //Success:
    return 0;
}

如果这不起作用,那么问题可能出在数组data中的数据上。

o8x7eapl

o8x7eapl2#

有一行char *check = strtok(data[line],d);,我们还没有展示d是什么,但是除非它是一个字符串,与输入行没有共同的字符,否则strtok()只是损坏了存储的数据,用空字节替换了d中的第一个字符,这意味着sscanf()将失败,因为它没有查看整行。您有const char d[] = "\r\n";或等效的,这不再是相关的,除了指出您应该显示足够的代码来重现问题。

相关问题