gpt4 book ai didi

c - 验证特定字符的用户输入

转载 作者:行者123 更新时间:2023-11-30 14:36:42 24 4
gpt4 key购买 nike

我正在创建一个运行纸牌游戏的程序,我需要获得王牌花色(H、D、S、C)并验证用户输入。我能够捕获像 j 或 3 这样的无效内容,但如果它们输入 HH 或 SS (无效),它会认为它是正确的。

我尝试使用 strlen 来查看是否有更多字符,我想也许我可以检查缓冲区中是否有其他垃圾,但不知道该怎么做。我也尝试过执行类似 while(scanf("%c", &trump) != 1 的操作,但这不起作用。我只用 c 编写了一个星期的代码。

我的肿瘤功能

char getTrump(){
char trump;
char ch;

char correct = 1;
while(correct == 1){
printf("Please choose a trump suit (H, D, S, C): ");
scanf(" %c", &trump);
while(getchar() != '\n');

if(isValidSuit(trump) == 1){
printf("Correct\n");
return trump;
correct = 0;
}else{
printf("Please enter a valid suit.\n");
}
}
}

如果它对我的 isValidSuit 函数有帮助(它必须有一个 char 作为参数)

int isValidSuit(char c){
char suits[] = {'H', 'D', 'S', 'C'};

for(int i = 0; i < 4; i++){
if(suits[i] == c){
return 1;
}
}

return 0;
}

运行它的示例:

Please choose a trump suit (H, D, S, C): j
Please enter a valid suit.
Please choose a trump suit (H, D, S, C): HH
Correct

最佳答案

if they enter HH, or SS (which is invalid) it thinks it's correct.

当然,因为当您输入 HH 时,scanf("%c", &trump); 会读取输入的第一个 H trump 变量并将输入的第二个 H 留在输入缓冲区中。此后,while 循环中的 getchar() 读取剩余的用户输入。 isValidSuit() 查找 H 作为 trump 变量的值并返回 1。因此,您将获得 HHSS 输入的正确

要解决此问题,您可以检查输入是否超过 1 个字符,并且该字符不是换行符,然后提示用户输入有效的输入,如下所示:

char getTrump(){
char trump;
char ch;

char correct = 1;
while(correct == 1){
printf("Please choose a trump suit (H, D, S, C): ");
scanf(" %c", &trump);
if (getchar() != '\n') {
while(getchar() != '\n');
printf("Please enter a valid suit.\n");
continue;
}
.......
.......

关于c - 验证特定字符的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com