如何读取字符直到字符?

How to read character until a char character?

我正在尝试执行一个循环,从文件中读取单个字符,直到找到 '\n''*'

这是我写的循环:

i=0;
do { 
      fscanf(fin,"%c",&word[i]);
      i++;
    } while(word[i]!='*'&&word[i]!='\n');

现在我试着看看为什么它不能与调试器一起工作。当我在 fscanf 之后立即打印 word[i] 时,它会显示正确的字符,但是如果我在与 '*' 或 [=11 进行比较时尝试打印 word[i] =] 它告诉我 word[i]'[=19=]0' 并且循环永远不会结束。

我也试过 fgetc 但我有同样的错误。

您的 while 条件未测试您刚刚阅读的 word 的相同元素,因为 i++ 在测试之前递增了变量。

将测试更改为使用 word[i-1] 而不是 word[i] 来对此进行调整。

顺便说一句,word[i] = fgetc(fin); 是一种更简单的读取一个字符的方法。

您必须确保您正在处理的字符与您刚刚读取的相同。

实际上你在测试单词 [i] 之前增加了计数器 i,这就是你检查失败的原因。

试试看

i=0;
do { 
      fscanf(fin,"%c",&word[i]);
    }while(word[i]!='*'&&word[i++]!='\n');

我宁愿在循环中移动检查(如果条件满足则中断)留在 while 中检查单词数组长度的测试。

另一种方式:

for(;;) {
   int c = fgetc(fin);
   if ( c == EOF ) {
      break;
   word[i] = c;
   if( c == '*' || c == '\n' ) {
      break;
   }
}