gpt4 book ai didi

c - 在 C 中,将文本文件读入结构数组,然后用该数组写入新的文本文件

转载 作者:行者123 更新时间:2023-11-30 16:38:27 26 4
gpt4 key购买 nike

我对 C 和一般编程相当陌生,所以我不确定我的问题。每当我运行代码并打开新的输出文件时,结构数据只是零。这是我的代码...我已将文本文件内容放在问题的底部。先感谢您。

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


typedef struct {
int id;
char description[40];
double mancost;
double sellprice;
} ItemInfo;


int readInfo( ItemInfo input[] );
void listData(ItemInfo input[], int i);

int main(){

ItemInfo input [200];
int i;
i = readInfo( input );
listData (input, i) ;
return 0;
}


int readInfo( ItemInfo input[] ) {
FILE *fin;
int i = 0;

fin = fopen( "C:/Users/ecrooks98/CLionProjects/untitled5/p6-initial.txt", "r" );

if( fin == NULL ) {
printf( "File cannot be opened\n" );
}
else {
while( !feof(fin)) {
fscanf( fin, "%d\t", &input[i].id);
fscanf( fin, "%39[^\t\n]s\t", input[i].description);
fscanf( fin, "%lf\t", &input[i].mancost);
fscanf( fin, "%lf\n", &input[i].sellprice);
i++;
}

fclose( fin );
}

return i;
}
void listData(ItemInfo input [], int i) {
FILE *fout;
int j;

fout = fopen("output.txt", "w");


for (j = 0; j < i; j++) {

fprintf(fout, "%d\t", input[i].id);
fprintf(fout, "%s\t", input[i].description);
fprintf(fout, "%lf\t", input[i].mancost);
fprintf(fout, "%lf\n", input[i].sellprice);
}
}

我输入的文本文件也看起来像这样

 2250 shoes 3.00 80.00
2251 hat .50 20.00
2252 iphone .10 600.00
2253 grill 80.00 100.00

最佳答案

您应该检查 fscanf() 的返回值,以确保您的转换成功。

使用括号匹配器%39[^\t\n]时,不需要尾随的s,并且将其视为单独的匹配字符。如果您的输入仅包含单个单词,最好仅使用 %39s,否则使用 %39[^\t]

此外,无需将其拆分为四个 fscanf() 调用,您可以将其全部合并在一起。而且您不应该尝试匹配空白的确切类型,一个简单的空格就可以解决问题。这导致:

int st;

do {
st = fscanf(fin, "%d %39s %lf %lf ",
&input[i].id,
input[i].description,
&input[i].mancost,
&input[i].sellprice);
i++;
} while (st == 4);

这应该可以满足您的需要。

此外,正如 SteveSummit 在评论中指出的那样,您必须在 listData() 函数中输出 input[j].*,因为 j 是循环的计数器变量(好,史蒂夫!)。

关于c - 在 C 中,将文本文件读入结构数组,然后用该数组写入新的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47488592/

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