gpt4 book ai didi

c - 使用 fscanf 从文件中读取以空格分隔的多个字符串

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

所以我想从文本文件中读取一些用空格分隔的字符串。我一直使用的代码是这样的:

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

如您所见,它会跳过所有姓氏并生成错误行。

那么我应该如何读取文本文件中用空格分隔的每个值并将其存储到变量中?

感谢您的宝贵时间

最佳答案

OP 的关键问题是使用 charphone[10]; 来存储 "6911111112",需要 11 个char。这一切都会导致无限 %[^ ]

的未定义行为

what should I do to read and store every value separated with space from the text file into a variable?

*scanf() 很难用来检测,并且不会被像 "\r\n" 这样的行结尾所迷惑。最好读取,然后解析它并使用宽度有限的字段。

考虑使用%n(它存储扫描偏移量)来检测正确的扫描。

char name[9];
char surname[20];
char phone[10+1];

char buf[100];
while (fgets(buf, sizeof buf, infile)) {
int n = 0;
sscanf(buf, " %8[^ ] %19[^ ] %10[^ ]%d %n", name, surname, phone, &code, &n);

// incomplete scan or extra text detected
if (n == 0 || buf[n]) {
printf("Error line\n"); // do not use name, surname, phone, code
break;
}

printf("%s %s %s %d\n", name, surname, phone, code);
}

关于c - 使用 fscanf 从文件中读取以空格分隔的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462117/

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