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);