gpt4 book ai didi

C - 从格式化的文本文件中读取带有整数的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:04 25 4
gpt4 key购买 nike

我有一个遵循这种格式的文本文件:

Thing 1: 0 0 128
Other thing: 255 64 255
Something else: 32 32 8

我打算最终向该文件中添加更多内容,但格式将保持不变。我想要做的是将冒号之前的所有内容读入一个字符串,并将其之后的所有内容读入一个整数。我试过这个:

fscanf((file = fopen("colors.txt", "r")) == NULL){
return -1;
}

fscanf("%s: %d %d %d", colorStr, &r, &g, &b);

while(!feof(file)){
printf("%s: %d %d %d", colorStr, r, g, b);
fscanf(file, "%s: %d %d %d", colorStr, &r, &g, &b);
}

fclose(file);

但是,我得到了这个输出:

Thing 1:: 0 0 0
0: 0 0 0
0: 0 0 0
128: 0 0 0

等等。理想情况下,输出应如下所示:

Thing 1: 0 0 128
Other thing: 255 64 255
Something else: 32 32 8

我该如何解决这个问题? colorStrrgb 变量已在程序的早期设置。

最佳答案

您的代码的问题是文本包含空格,这是 %s 不允许的。

将格式字符串更改为 %[^:] 将解决此问题。

但是,代码仍然容易受到缓冲区溢出的影响。确保您的格式字符串包含 colorStr 的最大大小以防止它:

char colorStr[100];
fscanf(file, " %99[^:]: %d %d %d", colorStr, &r, &g, &b);

您的代码使用了 feof(file),这是不正确的。您应该将 fscanf 放入循环头中。这会让您在循环之前删除重复的 fscanf 调用:

while(fscanf(file, " %99[^:]: %d %d %d", colorStr, &r, &g, &b) == 4) {
printf("%s: %d %d %d\n", colorStr, r, g, b);
}

注意前导 % 格式说明符前面的空格。它指示 fscanf 跳过前一行的尾随空格和/或 '\n'

Demo.

关于C - 从格式化的文本文件中读取带有整数的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668310/

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