我想让question函数里返回一个字符,然后再输入一个字符,和返回的字符比较,但运行后我只能输入数字n,然后函数就结束了,不能输入字符了。
#include
void question(int n){
switch(n){
case 1:printf("1+1=?\n");printf("A.1 B.2 C.3\n");/*return 'B'*/;break;
case 2:printf("1+2=?\n");printf("A.1 B.2 C.3\n");/*return 'C'*/;break;
case 3:printf("1+3=?\n");printf("A.1 B.2 C.4\n");/*return 'C'*/;break;
case 4:printf("1+4=?\n");printf("A.1 B.5 C.3\n");/*return 'B'*/;break;
case 5:printf("1+5=?\n");printf("A.6 B.2 C.3\n");/*return 'A'*/;break;
case 6:printf("1+6=?\n");printf("A.1 B.7 C.3\n");/*return 'B'*/;break;
default:break;
}
}
char answer(int n){
if(n==1)
return 'C';
}
int main(){
int n;
char c,a;
scanf("%d",&n);
question(n);
scanf("%c",&c);//为什么这行无法进行输入
a=answer(n);
if(a==c)
printf("ok");
else
printf("sad");
return 0;
}
在你的代码中,无法输入字符的问题可能是因为上一个输入留下了回车符的缘故。当你使用 scanf 读取数字后,回车符会被留在输入缓冲区中,然后当你使用 scanf 读取字符时,它会读取这个回车符而不是你实际想要输入的字符。你可以通过在第二个 scanf 语句前添加一个 getchar() 语句来清除输入缓冲区中的回车符。这样,你就可以正常输入字符了。
另外,你的 answer 函数中只为输入值为 1 的情况提供了返回值,其他情况下没有返回值。你需要为每个问题提供正确的答案并在函数中返回它们,这样你才能在主函数中检查用户的答案是否正确。
下面是一个修改后的代码,你可以参考一下:
#include <stdio.h>
void question(int n) {
switch (n) {
case 1:
printf("1+1=?\n");
printf("A.1 B.2 C.3\n");
break;
case 2:
printf("1+2=?\n");
printf("A.1 B.2 C.3\n");
break;
case 3:
printf("1+3=?\n");
printf("A.1 B.2 C.4\n");
break;
case 4:
printf("1+4=?\n");
printf("A.1 B.5 C.3\n");
break;
case 5:
printf("1+5=?\n");
printf("A.6 B.2 C.3\n");
break;
case 6:
printf("1+6=?\n");
printf("A.1 B.7 C.3\n");
break;
default:
break;
}
}
char answer(int n) {
switch (n) {
case 1:
return 'B';
case 2:
return 'C';
case 3:
return 'C';
case 4:
return 'B';
case 5:
return 'A';
case 6:
return 'B';
default:
return ' ';
}
}
int main() {
int n;
char c, a;
scanf("%d", &n);
question(n);
getchar(); // 清除输入缓冲区中的回车符
scanf("%c", &c);
a = answer(n);
if (a == c) {
printf("ok\n");
} else {
printf("sad\n");
}
return 0;
}
第23行: scanf("%c",&c); 修改为:scanf(" %c",&c);修改如下,供参考:
#include<stdio.h>
void question(int n){
switch(n){
case 1:printf("1+1=?\n");printf("A.1 B.2 C.3\n");/*return 'B'*/;break;
case 2:printf("1+2=?\n");printf("A.1 B.2 C.3\n");/*return 'C'*/;break;
case 3:printf("1+3=?\n");printf("A.1 B.2 C.4\n");/*return 'C'*/;break;
case 4:printf("1+4=?\n");printf("A.1 B.5 C.3\n");/*return 'B'*/;break;
case 5:printf("1+5=?\n");printf("A.6 B.2 C.3\n");/*return 'A'*/;break;
case 6:printf("1+6=?\n");printf("A.1 B.7 C.3\n");/*return 'B'*/;break;
default:break;
}
}
char answer(int n){
if(n==1)
return 'B';
if(n==2)
return 'C';
if(n==3)
return 'C';
if(n==4)
return 'B';
if(n==5)
return 'A';
if(n==6)
return 'B';
}
int main(){
int n;
char c,a;
scanf("%d",&n);
question(n);
scanf(" %c",&c);//scanf("%c",&c); 修改 为什么这行无法进行输入
a=answer(n);
if(a==c)
printf("ok");
else
printf("sad");
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: