Scanf_s保持返回\ 0而不是输入

在我看来,我已经陷入了一个非常简单的任务。 我编写了一个程序,可以选择一个随机数,并让你猜出它是哪一个,如果输入字符’n’或’N’,则退出程序。 代码如下:

#include  #include  #include  int input_switcher(int input, int answer) { if (input == answer) {return 1;} else if(input  answer) {return 3;} else {return 0;} } int main(void) { int input, answer, tries; char keepGoing = 'J'; srand((int)time(0)); while(42) { input = 0, tries = 0; answer = 1;//rand()%100+1; printf("Jag \"t\x84nker\" p\x86 ett tal mellan 1 och 100, gissa vilket!\n"); while(42) { printf("Gissning: "); scanf_s("%d", &input); switch (input_switcher(input, answer)) { case 1: printf("Grattis, det var r\x84tt!\n"); printf("Du gjorde %df\x94rs\x94k.", tries); break; case 2: printf("Du gissade f\x94r l\x86gt, f\x94rs\x94k igen!\n"); tries++; break; case 3: printf("Du gissade f\x94r h\x94gt, f\x94rs\x94k igen!\n"); tries++; break; default: break; } if(input == answer) {break;} } printf("Ska vi spela en g\x86ng till(J/N)? "); scanf_s("%*c%c", &keepGoing); if(keepGoing == 'N' || keepGoing == 'n') {return 0;} else if(keepGoing == 'J' || keepGoing == 'j') {system("cls");} } return 0; } 

我遇到的问题是我的上一次scanf_s给了我\0而不是我输入的字符。 我确定了问题或者我错了吗? 我可以改变什么来解决这个问题?

您的上一个scanf_s接收\n而不是\0 。 吃掉这个\n改变

 printf("Ska vi spela en g\x86ng till(J/N)? "); scanf_s("%*c%c", &keepGoing); 

  printf("Ska vi spela en g\x86ng till(J/N)? "); scanf_s(" %c", &keepGoing); ^ | space before %c specifier 

这是工作。
输出:在带有GCC 4.7.1的Win7上

在此处输入图像描述

scanf()就足够了,而不是scanf_s ==>

您可以在两个位置修改scanf

像这样:

 scanf("%d", &input); scanf(" %c", &keepGoing); ^ //use space here , to consume the leftover \n from previous scanf entry 

如果你仍然面临问题你可以使用fflush(stdin); 在最后一次scanf_s()之前在Windows中这将有效。

  fflush(stdin); scanf("%c", &keepGoing);