gpt4 book ai didi

c - 在 C 中使用 fprintf 写入 csv 文件时出现奇怪的字符

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

我正在尝试使用 fprintf 将名字、姓氏和电话号码插入到 CSV 文件中。但插入后,每行末尾都会插入额外的奇怪字符和逗号,并且在读取文件时会产生问题。

以下是我的代码:

FILE *fp;
fp = fopen(filePath, "r");
int i = 0;
***** Writing *****
FILE *fp;
fp = fopen("input.csv", "a");
fprintf(fp,"%s %s ,%s\n", firstname, lastname , phone_number);

*****正在阅读*****

while(!feof(fp)){   
fscanf(fp, "%s %s,%s", phone_directory[i].First_Name, phone_directory[i].Last_Name, phone_directory[i].Phone_Number);
printf("%s %s,%s\n", phone_directory[i].First_Name, phone_directory[i].Last_Name, phone_directory[i].Phone_Number);
i=i+1;
}

*****输入*****

//First Entry

abc xyz,65656565

//Second Entry

uvw efg,6979679679

***** 输出 *****

abc xyz,65656565,
, uvw,
efg,6979679679 ,,
,

请帮忙!!!

最佳答案

当您使用 fscanf(fp, "%s %s,%s", Phone_directory[i].First_Name, Phone_directory[i].Last_Name, Phone_directory[i].Phone_Number); 来读取像 abc xyz,65656565 这样的字符串,第二个 %s 将读取整个 xyz,65656565 部分,而不是在逗号处停止。

为了避免这种情况,您可以使用

fscanf(fp, "%s %[^,],%s", phone_directory[i].First_Name, phone_directory[i].Last_Name, phone_directory[i].Phone_Number);

%[^,]表示继续扫描,直到遇到但不包含,

fscanf()返回成功分配的数量(或出错时返回 EOF)。您可以检查其返回值(如果成功,在本例中应为 3)以查看是否所有变量都已赋值。

if( fscanf(fp, "%s %[^,],%s", str1, str2, str3)!=3 )
{
printf("\nSomething went wrong!");
}

为了防止溢出,您可能需要在格式字符串中指定字段宽度,例如

fscanf(fp, "%49s %49[^,],%49s", str1, str2, str3)

如果50是每个字符数组的大小。需要最后一个字符来存储 \0 字符。

另外,检查 fopen() 的返回值查看文件是否已成功打开。出错时返回NULL

例如,

if( (fp=fopen('input.txt', 'r'))==NULL )
{
perror("\nError opening file!");
}

按照评论中的建议,阅读 this发布。

关于c - 在 C 中使用 fprintf 写入 csv 文件时出现奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48778352/

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