c语言 - 为什么 scanf 在第一次使用时有效,而第二次使用时不起作用?



所以我只是试图接受表单1 2,或0 0,2 2,0 1等的用户输入。如果用户第一次输入这个,那么一切都按预期工作。然而,如果他们从一开始就输入错误,程序就会告诉他们输入错误,并再次要求输入,但随后这个输入似乎被调换了,第一个变量是空白的,而第二个变量假定第一个变量的值。这是怎么呢

#include <stdio.h>
#include <stdlib.h>
int validation();
int main ( void ) {

int valid = 0;

while ( valid == 0 ){
valid = validation();
}
return 0;
}
int validation(){

char cfirst, csecond;
int first, second, c;
printf("Please enter your number:n");
scanf("%c %c", &cfirst, &csecond);
printf("cfirst = %c, csecond = %cn", cfirst, csecond);

if( cfirst == '0' ){
first = 0;
}
else if( ( cfirst == '1' || cfirst == '2' ) ){
first = cfirst - '0';      // alternative to atoi for a singular character              
}    
else{
printf("Move rejected. Please try againn");
while( ( c = getchar() ) != EOF && c != 'n');
return 0;
}

if( csecond == '0'){
second = 0;
}
else if( csecond == '1' || csecond == '2' ){
second = csecond - '0';    // alternative to atoi for a singular character
}
else{
printf("Move rejected. Please try againn");
while( ( c = getchar() ) != EOF && c != 'n');
return 0;
}
//first = cfirst - '0';           
//second = csecond - '0';
printf("Your first number = %dn", first);
printf("Your second number = %dn", second);
return 0;
}

我试着用这行:

while((c = getchar()) != EOF &&C != 'n');

来清除输入缓冲区(我认为),这样scanf就会像第一次那样工作。这行不通!现在我很茫然。

当读取charscanf时,您正在读取缓冲区中的所有字符,包括输入'n'。scanf读取与声明的类型匹配的第一个可用数据,然后停止。如果您的程序第一次读取数据成功,它将存储值,但在缓冲区中保留输入'n'。当尝试第二次读取时,它会获取缓冲区中的前两个元素,在本例中是输入'n'和第一个值。当使用scanf读取数据时,您应该始终清理缓冲区。可以使用scanf

在读取后使用while(getchar!='n')

清理缓冲区。希望有帮助!

相关内容

  • 没有找到相关文章

最新更新