所以我想从一个用空格分隔的文本文件中读取一些字符串。我一直在使用的代码是:
int main() {
char name[9];
char surname[20];
char phone[10];
int code, nscan;
char termch;
FILE* infile;
infile = fopen("I4F6.txt", "r");
if (infile == NULL)
printf("Error reading text file\n");
while (TRUE){
nscan= fscanf(infile, "%[^ ] %[^ ] %[^ ] %d%c",
name, surname, phone, &code, &termch);
printf("%s %s %s %d\n", name ,surname, phone, code);
if (nscan == EOF)
break;
if (nscan != 5 || termch != '\n')
printf("Error line\n");
}
return 0;
}
文本文件是这样的,首先是名字,然后是姓氏,需要保存为字符串和代码的电话号码。
nikos dimitriou 6911111112 1
maya satratzemi 6933333332 20
marios nikolaou 6910001112 15
maria giannou 6914441112 1
dimitra totsika 6911555111 14
giannis pappas 6911111222 16
nikos ploskas 6911111662 20
但是我从这个printf得到的结果是:
nikos 6911111112 1
maya 6933333332 20
marios 6910001112 15
maria 6914441112 1
dimitra 6911555111 14
giannis 6911111222 16
nikos 6911111662 20
Error line
nikos 6911111662 20
因此,您可以看到它会跳过所有姓氏并产生错误行。
那么我该怎么做才能读取并将文本文件中用空格分隔的每个值存储到变量中?
感谢您的时间
答案 0 :(得分:0)
OP的关键问题是使用char phone[10];
来存储需要11 "6911111112"
的{{1}}。这一切都导致无限char
我该怎么做才能读取并将文本文件中用空格分隔的每个值存储到变量中?
%[^ ]
很难用于检测行而不会被*scanf()
等行结尾所迷惑。最好阅读行,然后解析它并使用宽度限制字段。
考虑使用"\r\n"
(它存储扫描偏移)来检测正确的扫描。
%n