簡體   English   中英

區分int或char /字符串與用戶輸入

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM