[英]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.