这是我的电话簿的一部分'程序。
void viewall(){
int n, checking = 0;
char name[50];
fp = fopen("Phonebook.txt","r");
printf ("\n\n");
fscanf (fp, "%s %d", name, &n);
while (!feof(fp)){
printf (" %s +880%d\n", name, n);
fscanf (fp, "%s %d", name, &n);
++checking;
}
if (checking == 0){
printf (" Contact List is Empty. No Contacts to Show...");
}
printf ("\n\n");
fclose(fp);
menu();
}
此部分显示列表中的所有联系人。但如果任何联系人姓名有两个部分,他们就会分开。例如:我输入Anik Shahriar作为名称,然后输入我的号码。我查看了我的文件,这些数据应该如何。
Anik Shahriar 01*******93
但是当我想显示所有联系人时。它打印得像这样:
Anik 0
Shahriar 01*******93
如何让程序打印整行?
答案 0 :(得分:1)
此行为是由行
引起的fscanf (fp, "%s %d", name, &n);
格式标识符%s扫描单个字符串。任何空白字符都会结束扫描。
http://www.cplusplus.com/reference/cstdio/scanf/
%S
字符串
任意数量的非空白字符, 在找到的第一个空格字符处停止。终止空值 字符会自动添加到存储序列的末尾。
我建议使用ca CSV文件并使用格式字符串。
scanf("%[^,] %d", name, number)
别忘了测试scanf结果值。