c語言輸入是數字
⑴ c語言中如何怎麼判斷輸入的是數字
#include <stdio.h>
#include <string.h>
// 枚舉類型:自然數,整數,小數 , 未知
enum TYPE {Natural,Integer,Float,Unkonwn};
/*
一個合法的數字(包括自然數,整數,小數)的格式是:
[+-](可選) + [0個或多個數字] + [小數點](可選) + [0個或多個數字]
比如:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
都是合法的數字
*/
enum TYPE check(char s[])
{
int length = strlen(s);
int start = 0 , end = length-1;
// 去開始空白字元
while(start < length && s[start]==' ' || s[start]=='\t'){start++;}
// 去結尾空白字元
while(end >=0 && s[end]==' ' || s[end]==' '){end--;}
// 是否負數標識
bool isNegative = false;
// 是否小數標識
bool isFloat = false;
// 是否有整數部分
bool hasIntegerPart = false;
// 是否有小數部分
bool hasDecimalPart = false;
for(int i = start ; i <= end ; i++)
{
if(s[i] == '-' || s[i] == '+')
{
if(i == start)
isNegative = (s[i] == '-');
else
return Unkonwn;
}
else if(s[i] == '.')
{
if(!isFloat)
isFloat = true;
else
return Unkonwn;
}
else if(s[i] >= '0' && s[i] <='9')
{
if(!isFloat)
hasIntegerPart = true;
else
hasDecimalPart = true;
}
else
{
return Unkonwn;
}
}
if(isFloat)
{
if(hasIntegerPart || hasDecimalPart)
return Float;
else
return Unkonwn;
}
else
{
if(!isNegative)
return Natural;
else
return Integer;
}
}
int main(int argc, char *argv[])
{
char s[100];
enum TYPE type;
while(1)
{
scanf("%s",s);
type = check(s);
switch(type)
{
case Natural:
printf("%s\n","Natural");
break;
case Integer:
printf("%s\n","Integer");
break;
case Float:
printf("%s\n","Float");
break;
case Unkonwn:
printf("%s\n","Unknown");
break;
}
}
return 0;
}
/*
測試數據:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
*/
⑵ C語言中怎麼輸入數字和字母
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
⑶ c語言 如何實現判斷輸入的是否是數字是否是字元
你好,這個問題其實並不難,你只要明白了c++鍵盤輸入的原理,其實鍵盤輸入的都是ask碼然後根據你想要的輸入是int還是char再轉換成你想要的值。
既然你想判斷鍵盤的輸入你可以用一個字元串先把你的輸入存下來然後再判斷那些字元是數字還是字母就ok啦
eg:
#include <stdio.h>
void main()
{
char *input[1000];
cin>>input;
if(input[0]>'0'&&intput[0]<'9')數字
else 字元
}
謝謝
,,,不知道c中還有ctype,,,其實你可以用ctype中的函數判斷,,,好吧,其實我學的是c++
⑷ c語言中如何判斷輸入的是字元還是數字
1、可以用sacnf或gets函數直接接收輸入的字元串,然後用循環遍歷字元串中每一個字元,判斷其是字母還是數字。
2、可以用循環調用getch()或getchar()函數來一個一個字元的接收輸入,同時判讀輸入的是字母還是數字。
3、假設字元c,滿足 (c>='a'&& c<='z')|| (c>='A' && c<='Z')就是字母,滿足 (c>=0 && c<=9)就是數字。
(4)c語言輸入是數字擴展閱讀:
getch():
所在頭文件:conio.h
函數用途:從控制台讀取一個字元,但不顯示在屏幕上
函數原型:int getch(void)
返回值:讀取的字元
例如:
char ch;或int ch;
getch();或ch=getch();
用getch();會等待你按下任意鍵,再繼續執行下面的語句;
用ch=getch();會等待你按下任意鍵之後,把該鍵字元所對應的ASCII碼賦給ch,再執行下面的語句。
⑸ C語言數字輸入
scanf函數的功能是從終端讀入,當你輸完數據按下回車時就會停止輸入了,不用再用這個for循環了。
⑹ c語言里 輸入時 怎麼判斷是字元還是數字
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
⑺ c語言判斷輸入是否為數字
你寫的這個有太多的錯誤。至於定義數組的時候a[N]這種錯誤我就不講了
還有在循環裡面(i=1;i<N;i++)
N沒賦值就調用的錯誤我也不講了
講你的死循環問題
你沒有給循環加一個限制條件
根據你continue的意思我暫時理解為
如果輸入的不是數字
那麼一直循環
重新輸入
一直到你輸入的是數字為止跳出循環
對嗎?
while(1){
printf("請輸入要查的值\n");
ret=scanf("%d",&n);
printf("ret=%d\n",ret);
if(ret==0){
printf("輸入錯誤,請重新輸入\n");
continue;
}
break;
}
這樣就可以
如果輸入的是數字
scanf的返回值為1
那麼循環的第一次
不會進入if(ret==0)
也就是說
如果輸入的是數字
直接執行break跳出循環
如果輸入的不是數字
循環的時候執行語句if(ret==0)
然後執行continue
continue的意思是跳出當前循環繼續下一次循環
即執行到continue之後從新循環而不會執行到break
以此類推
只要你輸入的不是數字
則永遠循環
輸入的如果是數字
跳出循環
執行完畢。
大哥
如果小弟回答正常
給點分吧
多謝
=================================================================
另外對於一樓的同學
我必須有好的提醒你scanf()的用法以及返回值的相關問題
我想你肯定不知道
scanf("%d",&i)
如果你輸入的是int型則返回1
否則返回0
換句話說即你輸入的類型和scanf()裡面預先定義的類型一致
則返回1
否則返回0
THANK
YOU