代码不读取字符串的最后一个字符(C 语言)


#include "stdio.h"
int main() {
  char input[10];
  char standart;
  int i;
  int b = 0;
  scanf("%c", &standart);
  for(i = 0; i < 10; i++){
    scanf("%c ", &input[i]);
    if(input[i] == standart){
      b++;
    }
  }
  printf("%d", b);
  return 0;
}
// ( 2 % a b ( r ) ? ( (

该代码支持读取列表中的第一个字符,然后查看有多少所述字符(不包括其自身)。 但是代码没有读取最后一个字符,简而言之,当我输入示例输入时,代码只看到 2'(',而它应该看到 3。

你必须这样做scanf(" %c",&c);
因为它从以前的输入中读取"",所以空格将跳过""

对于给定的输入( 2 % a b ( r ) ? ( (,程序将第一个字符(作为变量standart的输入 -

scanf("%c", &standart);

出现此问题是因为for循环的第一次迭代中,scanf(后存在的给定输入中读取第一个空格字符(空格)并将其存储到input[0]中。for循环运行 10 次迭代,最后一个字符(未插入input数组中,因此数组中的standart字符数比预期少 1 input即 2。

for循环scanf语句更改为 -

scanf(" %c", &input[i]); //Removed the space after %c and added a space before %c.

这样,for 循环scanf将吃掉空格字符。因此,输入 - 2 中的下一个字符将存储到 input[0] 中,% 将存储到 input[1] 依此类推,最后一个字符 '(' 将存储到 input[9] 中。并且b将在数组中具有正确的standart字符数input即 3。

最新更新