gpt4 book ai didi

c - 脚本只读取文件的偶数行

转载 作者:行者123 更新时间:2023-11-30 19:18:13 24 4
gpt4 key购买 nike

我有一个 C 脚本,它读取一个按如下行结构的文件:

1,example,2,3;
2,exampl,3,5;
3,examp,7,4;
4,exam,9,1;

脚本在这里:

while(fscanf(fptr,"%d,%[^/,],%d,%s", &m[i].id,m[i].nojm,&m[i].salar,m[i].phon) != EOF) {

fscanf(fptr,"%d,%[^/,],%d,%s;", &m[i].id,m[i].nojm,&m[i].salar,m[i].phon);
printf("%d,%s,%d,%s\n", m[i].id,m[i].nojm,m[i].salar,m[i].phon);
i++;
}

我遇到的问题是,它只读取文件的偶数行(第二、第四、第六、第八)...

我应该如何编辑代码才能读取所有行?

感谢您的帮助。

更新1:

void nacti(emp *p,int n)
{

FILE *fptr;
fptr=fopen("ulozka.txt","r");
if(fptr==NULL){
printf("Error opening file!");
getchar();
}

typedef struct
{
int id;
char nojm[32];
int salar;
char phon[32];
} data_t;

int i = 0;
data_t m[4];
while(fscanf(fptr,"%d,%[^/,],%d,%s", &m[i].id,m[i].nojm,&m[i].salar,m[i].phon) != EOF) {
printf("%d,%s,%d,%s\n", m[i].id,m[i].nojm,m[i].salar,m[i].phon);
i++;
}

printf("%d,%s,%d,%s\n", m[4].id,m[4].nojm,m[4].salar,m[4].phon);
//printf("%d",pocet);

}

如果只有m[4],代码只会读取文件的4行?我应该如何编辑它来读取“不确定”的行数?

最佳答案

您的代码应替换为以下内容:

while(fscanf(fptr,"%d,%[^/,],%d,%s", &m[i].id,m[i].nojm,&m[i].salar,m[i].phon) != EOF) {
printf("%d,%s,%d,%s\n", m[i].id,m[i].nojm,m[i].salar,m[i].phon);
i++;
}

while 循环条件中的 fscanf 调用将在每次循环迭代时执行,因此您无需在循环内再次调用它。

更新:

以下解决方案适合我。 You can try it here .

#include <stdio.h>

typedef struct
{
int id;
char nojm[32];
int salar;
char phon[32];
} data_t;

int main(void) {
int i = 0;
data_t m[4];
while(fscanf(stdin,"%d,%[^/,],%d,%s", &m[i].id,m[i].nojm,&m[i].salar,m[i].phon) != EOF) {
printf("%d,%s,%d,%s\n", m[i].id,m[i].nojm,m[i].salar,m[i].phon);
i++;
}
return 0;
}

我猜您收到运行时错误的原因是您用于字符串的字符数组(nojmphon)不够长处理文本文件中的某些条目,因此内存被覆盖。尝试增加您使用的长度,以确保它大于您在文本文件中遇到的最长字符串。

另一种可能性是数组中没有足够的项目来读取文本文件中的所有数据。在这里,我有一个包含 4 个项目的静态数组来支持文本文件中的 4 个项目。如果您的文本文件包含 10,000 个项目,您需要确保已正确分配内存来存储所有这些项目。

关于c - 脚本只读取文件的偶数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026415/

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