gpt4 book ai didi

c - C 程序中字符输入的整数验证

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

我编写这个程序是为了验证用户输入的选择(整数类型变量)。但问题是在一次有效输入之后,下一个无效输入(例如:字符类型变量)将不会存储在整数变量(选择)中。我该如何解决这个问题?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#pragma warning (disable:4996)

void main()
{
int selection;
while (1)
{
while (1)
{
printf("Enter Your Selection (0-4) > ");
scanf("%d", &selection);
rewind(stdin);
if (!selectionCheck(&selection, 0, 4))
printf("Invalid\n");
else break;
}
printf("Success\n");
}

system("pause");
}

int selectionCheck(int *input, int min, int max)
{
char str[100] = "";
itoa(*input, str, 10);
if (isdigit(str[0]))
{
if (*input < min || *input > max)
return 0;
else return 1;
}
else
{
return 0;
}
}

最佳答案

一些注意事项:1) 您没有检查 scanf() 返回值,这非常有用:负返回意味着输入的字符无法转换为 int (因为“%d”格式),返回值等于0表示输入为空(没有输入任何字符)。

2) 如果用户输入了错误的字符(不是数字),输入缓冲区将保持忙碌状态,直到您以其他方式读取它。好主意是在这里使用额外的 scanf("%s") 将任何字符读取为字符串,因此在此调用后缓冲区将为空。在这里使用 rewind() 是不够的。

3) 对于 isdigit(),不需要在 selectionChecking() 中额外检查输入,因为 scanf() 中的“%d”格式 不允许读取除数字之外的任何其他内容。

4) 无需在 selectionChecking() 调用中传递指向 selection 值的指针 - 将其作为值传递就足够了。

所以,请尝试以下操作:

// declaration of 'selectionCheck()'
int selectionCheck(int input, int min, int max);

void main()
{
int selection;
while (1)
{
while (1)
{
printf("Enter Your Selection (0-4) > ");

int ret = scanf("%d", &selection);
if (ret < 0) // invalid characters on input
{
printf("Invalid characters\n");
scanf("%s"); // empty buffer, reading it as string and putting readed characters to nowhere ;)
continue; // go to top of loop
}

if (ret == 0) // empty input
{
printf("No (empty) input\n");
continue; // go to top of loop
}

// here 'ret' is greather than 0, so valid number was entered

if (selectionCheck(selection, 0, 4)) // is value between 0 and 4 ?
break; // yes, success, break current loop!

printf("Invalid value\n");
}

printf("Success\n");
}

system("pause");
}

int selectionCheck(int input, int min, int max)
{
if (input < min || input > max)
return 0;
else
return 1;
}

当然,您可以将“selectionCheck()”写得更简洁:

int selectionCheck(int input, int min, int max)
{
return (input < min || input > max) ? 0 : 1;
}

或者简单地说:

int selectionCheck(int input, int min, int max)
{
return (input >= min && input <= max);
}

关于c - C 程序中字符输入的整数验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414303/

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