Why does the message print twice?

狂风中的少年 提交于 2019-12-01 09:38:11

It's because when you use getchar it returns the next character, but leaves the newline in the input buffer. So the next getchar returns that newline.

You should also be careful because getchar actually returns an int and not a char.

You can solve this either by another getchar, or use scanf like this:

scanf("%c ", &user);

Note the space after the c in the above format, it tells scanf to read and disregard trailing whitespace.

You could also read a line with e.g. fgets and then use a simple sscanf on that line, then no extra space is needed.

The problem cause is related to the newline charachter

use scanf() in this way instead of using getchar()

scanf(" %c", &user);

You could fix it like this for example:

char assign(void)
{
      char user;
      char throwaway_newline;

      printf("Would you like to be X or O (Enter your choice): ");
      user=getchar();
      throwaway_newline = getchar();
      while(user != 'X' && user != 'x' && user != 'O' && user != 'o')
      {
             printf("Invalid symbol, please re-enter: ");  
             user=getchar();
             throwaway_newline = getchar();
      }
      if(user == 'O' || user == 'o')        return('O');
      else if(user == 'X' || user == 'x')   return('X');     
}

You have a newline in your input buffer.

When you press a character which is not [xX] and not [oO] and follow it with a newline. getchar actually gets to see 2 characters(the newline and the invalid character)

You may want to use fgets instead of relying on character input and ignoring newlines with 2 getchar() calls everytime.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!