所以我有一个看起来像这样的文件:
9
$11$ pelle
$2$ pollo
$333$ palla
$41$ alla
$5078$ tta
$6$ tti
$7$ ll
$81$ er
$900$ ere
n = 9是我想在程序中读取的键值对的数量。
所以对于key = "11", value = "pelle"
等等…
typedef struct {
char key[20];
char value[20];
} Dictionary;
int main() {
FILE *fin = fopen("../dizionario.txt", "r");
if (fin == NULL) {
printf("error");
return 1;
}
int n;
fscanf(fin, "%d", &n);
Dictionary dict[n];
for (int i = 0; i < n; i++)
fscanf(fin, "$%[^$]$ %s\n", dict[i].key, dict[i].value);
fclose(fin);
for (int i = 0; i < n; i++) {
printf("Key: %s, Value: %s\n", dict[i].key, dict[i].value);
}
return 0;
}
我采用了以下方法来读取每个键值对,并将它们存储在一个dict结构中,我认为这是一个不错的选择。当我打印到控制台以检查值是否到处都是时,输出为:
Key: , Value:
Key: , Value:
Key: , Value:
Key: , Value:
Key: , Value:
Key: , Value:
Key: , Value: å
Key: <0¶[÷, Value:
Key: , Value: °
我相信问题出在格式字符串上,我似乎无法正确处理:
"$%[^$]$ %s\n"
1条答案
按热度按时间uujelgoq1#
1.这里最简单的修复方法是在第二个格式字符串之前添加一个空格``,这样它就忽略了前一行的尾随换行符。
1.使用符号常量作为大小,并且在阅读
scanf()
字符串时始终使用带值的最大字段。1.考虑在
n
上添加一个检查,以确保它足够小(在我的系统上,默认堆栈是8 MB;或者更好地使用malloc()
并检查它是否成功)。和相应的输出: