首先没有任何问题fscanf()
。您应该知道的第一件事是 fscanf 将换行符视为空格。因此,即使您将文件视为单独的行,fscanf 也会将其视为:
setting1 = 1 setting2 = 2 setting3 = 3
这不是问题,但它确实会影响您编写 fscanf 代码以读取此文本字符串的方式。下一个简单的方法太简单了?!
fscanf(fp, " setting1 = %d", &setting1);
fscanf(fp, " setting2 = %d", &setting2);
fscanf(fp, " setting3 = %d", &setting3);
笔记。格式上有一个前导空格fscanf
。这样扫描仪就不能找到任何、一个或多个空白字符。如果文本文件的行有前导空格,则不会找到匹配项,除非该前导空格符合格式。这很有意义,因为一行的开头可能有几个空格。
当 fscanf 编码正确时,使用 read 和 append 打开文件也可以。
让它工作。现在,该文件是否有比三个设置更多的内容?如果是这样,那么您的 fscanf 代码可能必须更复杂,但也许不是。记住这个想法是读取数据,如果你的代码读取了数据,那么你就完成了。
只是为了好玩,我尝试了以下 fscanfs:
fscanf(fp, " setting1 = %i ", &setting1);
fscanf(fp, "setting2 = %i ", &setting2);
fscanf(fp, "setting3 = %i", &setting3);
请注意,“格式定义中奇怪的空格允许每个关键字之间有一个或多个空格。
最后一条评论。您的代码应该考虑到用户可能拼错了关键字,在这种情况下 fscanf 会失败。因此,始终存储或测试 fscanf 的返回值:
int x;
x = fscanf(fp, " setting1 = %d", &setting1);
if (x == 0) { // keyword setting1 was misspelled...
对于当天的琐事:
x = fscanf(fp, " s e t t i n g 1 = %d", &setting1); // also works