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

时间:2017-10-27 15:31:29

标签: 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。

2 个答案:

答案 0 :(得分:0)

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

scanf("%c", &standart);

问题出现了,因为在for循环的第一次迭代中,scanf正在读取(之后存在的给定输入的第一个空格字符(空格)并存储它进入input[0]for循环运行10次迭代,最后一个字符(未插入input数组,因为standart数组中的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],依此类推,最后一个字符为&#39;(& #39;将存储到input[9]。 并且bstandart数组中具有正确的input字符数,即3。

答案 1 :(得分:0)

你必须这样做scanf(" %c",&c);
因为它上面写着&#39; \ n&#39;从之前的输入中,空格将跳过&#39; \ n&#39;