【发布时间】:2016-01-01 19:40:27
【问题描述】:
我目前正在学习从 C 中读取文件。 无论如何,切入正题:
文本文件内容:
123456 James Doakes; 0
987987 Dexter Morgan; 0
010203 Masuka Perv; 0
int main()
{
char accountNr[ACCOUNTNRSIZE], ownerName[NAMESIZE], enter[3];
int accountBalance = 0;
char filename[] = "breg.txt";
FILE *file = fopen(filename, "r");
if (file != NULL) {
char line[128];
while (fgets(line, sizeof(line), file) != NULL) {
sscanf(line, "%s %[^;] %d ", accountNr, ownerName, &accountBalance);
printf("%s", ownerName);
//fflushstdin();
}
fclose(file);
} else {
perror(filename);
}
return 0;
}
我写这个是为了检查 James Doakes 等名字是否注册正确:
printf("%s", ownerName);
但是当它打印出来时,就好像标准输出仍然处于活动状态,我可以按 Enter,它会再次输入名称。我的目标当然是能够扫描数字、全名和最后一个数字作为单独的变量。但这显然行不通。我猜一个 \n 也被注册了。不知道,我只是猜测。
我做错了什么?为什么?我该如何解决这个问题?
非常感谢, 米夫
【问题讨论】:
-
试试
sscanf(line, "%s %[^;]; %d", accountNr, ownerName, &accountBalance);或检查它的返回值,int r = sscanf(line, "%s %[^;]; %d", accountNr, ownerName, &accountBalance); if(r == 3) /* accountNr, ownerName and accountBalance scanned successfully */ else if (r == 2) /* aaccountNr and ownerName scanned successfully */ else if (r == 1) /* aaccountNr scanned successfully */ else /* Nothing scanned successfully :( */ -
打印 ownerName 时还要添加
'\n':printf("%s\n", ownerName);