[英]Distinguishing if int or char / string from user input
我正在尝试读取用户的输入。 我想区分提供的输入是整数,字符还是字符串。
我试着用scanf_s来解决这个问题,但是效果不佳。 有没有办法从用户那里获取输入,并判断这是整数,字符还是字符串?
这就是我到目前为止的情况。
void CheckIfInt()
{
char returnValue = 0;
//loop until we are given a valid input
while(true)
{
scanf_s("%c", &returnValue);
scanf_s("%C");
if(isdigit(returnValue))
{
//Do something
break;
}
else if(returnValue == 'a')
{
//Do something else
break;
}
}
}
您应该做的第一件事是不使用整数指针,而是使用char指针。 这样可以更轻松地一次查看整个输入一个字节。 因此,您的代码应如下所示:
void ReadInteger(char* value, bool isX) { ... }
下一部分取决于您要执行的操作,是要读取整行作为一个输入,还是要读取某些内容,直到遇到空格为止。 我将假设稍后的内容,这又回到了您的问题。
如何判断您是否刚刚读了一个字符
int isChar(char *value) {
return value != NULL && strlen(value) == 1 && isalpha(value[0]);
}
如何判断您是否只读取整数
int isInteger(char *value) {
int ans = 0;
if (value != NULL && strlen(value) > 1) {
while (*value && isdigit(*value)) {
value++;
}
ans = (value == NULL);
}
ans;
}
如何判断您是否刚刚读过字符串
我很懒,所以可以这样做:
int isString(char *value) {
return !isChar(value) && !isInteger(value);
}
请注意,整数检查方法会告诉用户是否仅输入数字,但不会告诉您该数字是否适合32位整数。 如果需要这种效果,可以轻松地修改代码以实现此目的
您可以使用fgets
将输入读取到字符数组中,然后使用sscanf
对其进行解析。 您可以查看字符数组以了解它是什么类型的数据。 如果您提供输入示例,我可以向您显示代码。
这应该有所帮助。 您可以操纵代码。
int myNum;
char myTerm;
if(scanf("%d%c", &myNum, &myTerm) != 2 || myTerm != '\n')
printf("failure\n");
else
printf("valid integer followed by enter key\n");
原因:myNum将始终包含一个整数,因为它是一个整数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.