[英]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;
}
isalpha
和isdigit
應用於包含 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);
char
和int
是數據類型,這里用戶只輸入一個字符串。 您的問題實際上是用戶是否輸入了可能被解釋為 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.