簡體   English   中英

如何在 c 中檢查 int 或 char

[英]How to check int or char in c

我有一個將攝氏度轉換為華氏度的代碼。 我需要檢查用戶寫的是什么字符或整數。

我嘗試過 isalpha 和 isdigit,但它們不起作用。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
    char t[] = "";
    scanf("%s", &t);
    if(isalpha(t))
    {
        printf("It's char\n");
    }
    else if (isdigit(t))
    {
        printf("It's int\n");
    }


    return 0;
}

isalphaisdigit應用於包含 char 的 int 類型的對象。

您正在嘗試將這些函數應用於 char * 類型的 object(數組類型在表達式中隱式轉換為指針類型)。

此外,數組t聲明為

char t[] = "";

甚至不足以存儲從 scanf 獲得的一個字符,因為它還需要存儲終止零。 否則 scanf 的調用將具有未定義的行為。 而且scanf的調用也不正確。

scanf("%s", &t);
            ^^^

它至少應該寫成

scanf("%s", t);

你可以聲明一個 char 類型的 object

char t;

然后像使用 scanf

scanf(" %c", &t);

最后

if ( isalpha( ( unsigned char )t ) )
{
    printf("It's char\n");
}
else if ( isdigit( ( unsigned char )t ) )
{
    printf("It's int\n");
}

首先:

char t[] = "";

創建一個只有一個字符的緩沖區,然后

scanf("%s", t);

除了空字符串輸入之外的任何內容都會超出該緩沖區。 使scanf()避免溢出並不簡單,但即使如此,大多數天真的實現也會有一個實用的緩沖區長度,例如;

char t[128] = "" ;

如果期望輸入一個可以轉換為int的字符串,那么 10 個十進制數字對於所有 32 位整數來說就足夠了。

scanf("%10s", t);

charint是數據類型,這里用戶只輸入一個字符串。 您的問題實際上是用戶是否輸入了可能被解釋為 integer 的內容。

isalpha()isdigit()對單個字符進行操作,但t是一個字符串。

以下將檢查字符串t的第一個字符:

if( isdigit(t[0]) )
{
    printf("It's digit\n");
}
else
{
    printf("It's not a digit\n");
}

請注意,對isalpha()進行測試毫無意義,因為所有數字 + 所有 alpha 的並集仍然只是所有字符的子集。

如果實際上您只是想驗證整個字符串是否為數字,那么:

for( int i = 0; t[i] != 0 && isdigit(t[i]) i++ )
{
    // nothing
} 

if( t[i] == 0 )
{
     printf("It's numeric\n");
}
else
{
     printf("It's not entirely numeric\n");
}

即使這樣,數字字符串也不能用int表示; 它也必須在范圍內。 您可能還想考慮在開頭使用 -/+ 符號的可能性,並可能考慮忽略尾隨的非數字數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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