我的代码有些问题。首先,当我想从switch语句中调用一个函数时,它不会工作。我的意思是函数正在调用,但fgets和stdin不起作用。如果我在main中单独调用相同的函数,则一切正常。而另一个问题是,当我想在else语句中回忆相同的函数时。我想在密码(或昵称)错误时召回一次这个函数,但它会召回几次,通常很随机。
void passcheck(){
char password[11];
int up,num;
puts("Password (max 10 signs, must contain upperletter and number):");
fgets(password, 10, stdin);
for(int i = 0; i < 10; i++){
if (isupper(password[i])) {
up=1;
}
if (isdigit(password[i])){
num=1;
}
}
if (num == 1 && up == 1){
printf("Your password is good and looks like:\n%s\n", password);
}
else{
puts("Correct you password");
passcheck();
}
}
void nickname(){
char nick[11];
int up,num;
puts("Type your nickname (must contain upperletter):");
fgets(nick, 10, stdin);
for(int i = 0; i < 10; i++){
if (isupper(nick[i])) {
up=1;
}
}
if (num == 1){
printf("Your nickname is good and it is:\n%s\n", nick);
}
else{
puts("Correct nickname");
nickname();
}
}
void what_to_do(){
int number;
puts("What do you want to do?\n 1. Check password \n 2. Check nickname");
scanf("%d", &number);
switch (number) {
case 1:
passcheck();
break;
case 2:
nickname();
break;
default:
puts("Wrong sign!");
break;
}
}
int main(){
what_to_do();
//passcheck();
return 0;
}
答案 0 :(得分:0)
所有问题都与输入处理在标准输入中的工作方式有关:它是作为字符流处理的,而只有当您按下输入键时才会从终端发送数据,这会添加一个新行字符流。
您的代码不期望换行符,并将其解释为输入的一部分,从而导致解释的副作用。
每次从标准输入读取时,必须使用或删除换行符。这里解释了为什么会发生这种情况,你可以做些什么来完全避免它: