gpt4 book ai didi

c - fscanf 没有将数据保存到结构中?

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:57 25 4
gpt4 key购买 nike

我有一个结构数组,它们被保存到一个文件中。目前文件中有两行:

a a 1
b b 2

我正在尝试读入文件并将数据保存到结构中:

typedef struct book{ 
char number[11];//10 numbers
char first[21]; //20 char first/last name
char last[21];
} info;

info info1[500]
into num = 0;

pRead = fopen("phone_book.dat", "r");

if ( pRead == NULL ){

printf("\nFile cannot be opened\n");
}
else{

while ( !feof(pRead) ) {

fscanf(pRead, "%s%s%s", info1[num].first, info1[num].last, info1[num].number);

printf{"%s%s%s",info1[num].first, info1[num].last, info1[num].number); //this prints statement works fine

num++;
}

}
//if I add a print statement after all that I get windows directory and junk code.

这让我觉得这些项目没有保存到结构中。任何帮助都会很棒。谢谢!

编辑:好的,所以它保存得很好,但是当我将它传递给我的函数时,它给我垃圾代码。

当我调用它时:

sho(num, book);

我的展示功能:

void sho (int nume, info* info2){
printf("\n\n\nfirst after passed= %s\n\n\n", info2[0].first); //i put 0 to see the first entry
}

最佳答案

  1. 我认为您的意思是 int num = 0;,而不是 into

  2. printf{... 是语法错误,printf(... 代替。

  3. 检查 fscanf 的结果,如果不是 3,则说明还没有读取所有 3 个字符串。

  4. 不要使用 (f)scanf 读取字符串,至少在没有指定最大长度时不要使用:

    fscanf(pRead, "%10s%20s%20s", ...);

    但是,更好的是,使用 fgets 代替:

    fgets(info1[num].first, sizeof info1[num].first, pRead);
    fgets(info1[num].last, sizeof info1[num].last, pRead);
    fgets(info1[num].number, sizeof info1[num].number, pRead);

    (当然还要检查fgets的结果)

  5. 确保 num 不超过 499,否则 info 会溢出:

    while(num < 500 && !feof(pRead)){.

关于c - fscanf 没有将数据保存到结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19685020/

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