gpt4 book ai didi

c - 如何在我的 C 限制下检查用户的有效输入?

转载 作者:行者123 更新时间:2023-11-30 20:17:01 24 4
gpt4 key购买 nike

我有一个问题正在尝试解决!如何在我的 C 限制下检查用户的有效输入?

我需要使用开关盒构建一个“银行模拟器”,用户提供一个字符,这将决定他将执行什么操作......例如,如果用户输入 O,他将开设一个新帐户。

现在我的问题是,我希望用户可以选择输入,例如,仅输入一个字符,但如果我使用:scanf("%c", char) 并且用户在 OB33、B33 中输入的内容将保留在缓冲区中,程序将继续执行,直到下一个 scanf。我还尝试使用 %[OBDWCIPE]fgets 等限制,但似乎没有任何方法可以解决验证输入的问题...

(我还需要对 INT 和 DOUBLE 执行相同的操作...)

我怎样才能避免它......?

最佳答案

根据您的代码注释,将该代码包装在 main 和 do/while 中。
使用充足的缓冲区 [100]。
fgets 中使用 sizeof buf 作为第二个参数。
buf[1] != "\n" 中使用单引号代替双引号。

#include <stdio.h>
int main ( void) {
char buf[100];
do {
printf("What actions would you like to do:");
fgets ( buf, sizeof buf, stdin);
if( '\n' != buf[1])
{
printf("not valid");
}
printf("string is: %s\n", buf);
} while ( '\n' != buf[1]);
return 0;
}

使用类似的 do/while 包裹 strtol 可以解析长整数。
last 是指向 strtol 处理的最后一个字符的指针。这里的有效输入是一个整数后跟一个换行符。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
int main ( void) {
char buf[100];
do {
printf("What actions would you like to do:");
fgets ( buf, sizeof buf, stdin);
if( '\n' != buf[1])
{
printf("not valid");
}
printf("string is: %s\n", buf);
} while ( '\n' != buf[1]);

long int value = 0;
char *last = NULL;
do {
printf("Enter an integer:");
fgets ( buf, sizeof buf, stdin);
value = strtol ( buf, &last, 10);
if ( ( errno == ERANGE && ( value == LONG_MAX || value == LONG_MIN))
|| ( errno != 0 && value == 0)){// parsing error from strtol
perror ( "value");
last = buf;
}
} while ( last == buf || '\n' != *last);
printf ( "value is %ld\n", value);
return 0;
}

关于c - 如何在我的 C 限制下检查用户的有效输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58984678/

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