gpt4 book ai didi

无法从 switch 正确调用函数,无法调用函数

转载 作者:行者123 更新时间:2023-11-30 19:38:59 26 4
gpt4 key购买 nike

我的代码有一些问题。起初,当我想从 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;
}

最佳答案

您的所有问题都与标准输入的输入处理工作方式有关:它被处理为字符流,而仅当您按下回车键时才会从终端发送数据,这会将新行字符添加到流。

您的代码不需要换行符,并将其解释为输入的一部分,这会导致所解释的副作用。

每次从标准输入读取时,都必须消耗或删除换行符。这里详细解释了为什么会发生这种情况以及您可以采取哪些措施来避免这种情况:

http://www.gidnetwork.com/b-60.html

关于无法从 switch 正确调用函数,无法调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37287786/

26 4 0
文章推荐: c# - 从 List 获取对象,其中属性为 null 且顺序为最低