設計一個程式利用字串來接收使用者的輸入,然後判斷使用者的輸入是否是一個正確的數值,如果使用者輸入正確,顯示使用者的輸入是正確的。如果不對,則要求使用者再輸入一次。你的程式最高可以讓使用輸入 40 位數,小數點、正負號都是可以接受的。例如:-122.33、+23、+23.45 是正確的輸入,++12.33、--1232.23、2.3.4.5、23.A …等等都是錯誤的輸入。
以下是我寫的程式碼 :
#include
#include
int main(void)
{
char word[40];
int i=0;
printf ("請輸入一個字串\n");
scanf ("%s",&word);
do
{
if(i=0)
{
for (i=0;i=0;)
switch (word[i])
{
case'+':
break;
case'-':
break;
case'.':
break;
default:
printf("你輸入的字串為錯誤的,請重新再輸入一次!\n");
}
}
else
{
for (i=1;i<=39;i++)
{
switch (word[i])
{
case'.':
break;
default:
printf("你輸入的字串為錯誤的,請重新再輸入一次!\n");
}
}
}
}
while (word[i]==1);
printf ("你輸入的字串正確!\n");
getch ();
return 0;
}
不知道哪裡出錯了說.....它會跑回圈....但是卻沒判斷到...到最後會列出一大排錯誤要重輸入,並在最後一行列出數值正確...明明是錯的說!
有哪位大大可以幫我修正一下阿!!
謝謝囉!! 很急的說~~~
2006-12-19 19:35:27 · 2 個解答 · 發問者 喬喬 1 in 電腦與網際網路 ➔ 程式設計
幾個錯誤或是該注意的地方
1. word[40]
字串陣列的空間最好多留兩格放跳行
有考慮使用者輸入多於40字的情形嗎?
2. scanf 沒有在迴路中
3. for (i=0;i=0;) 是嚴重的錯誤
第二個 i = 0不是判斷指令 造成迴路無法停止
4. 沒有偵查兩個小數點的情形
你的題目好像是
a) 輸入40 字以內的數
b) 第一字必須是 '+' 或 '-'
c) 不可以多於一個小數點
針對於此, 我修改如下:
#include
#include
int main(void)
{
char word[40];
int i = 0;
int len, dot = 0, error = 0;
printf ("請輸入一個字串\n");
do
{
switch (error)
{
case 1 :
printf("錯誤的字串: 開頭不含有+-號. 請重新再輸入一次!\n");
break;
case 2 :
printf("錯誤的字串: 小數點重複. 請重新再輸入一次!\n");
break;
case 3 :
printf("錯誤的字串: 包含不正當字元. 請重新再輸入一次!\n");
break;
}
scanf ("%s", &word);
len = strlen(word);
error = 0;
if ((word[0] != '+') && (word[0] != '-'))
{
error = 1;
continue;
}
for (i = 1; i < len; i++)
{
if (word[i] == '.')
{
if (++dot == 2)
{
error = 2;
continue;
}
}
else if (word[i]<'0' || (word[i]>'9')
{
error = 3;
continue;
}
}
} while (error > 0);
printf ("你輸入的字串正確!\n");
getch ();
return 0;
}
2006-12-20 10:17:10 · answer #1 · answered by JJ 7 · 0⤊ 0⤋
我其實不想改你的架構 找找BUG就好
但你"重複輸入"沒有在迴圈內
且要判斷的 也頗多 我就改了點東西了 !!! 不好意思
不過我寫的CODE也有BUG喔 邏輯BUG
#include
#include
int main(void)
{
char word[40];
int i,counter,check=1,dot;
do
{
if(check==1)
{
do
{
printf ("請輸入一個字串 : ");
scanf ("%s",&word);
for(i=1,counter=0,dot=0;word[counter]!='\0';counter++);
printf("word real size = %d\n",counter);
switch(word[0])
{
case '+':
check=0;break;
case '-':
check=0;break;
default :
check=1;
printf("你輸入的字串開頭不含有+-號 為錯誤的,請重新再輸入一次!\n");
break;
}
}
while(check==1);
}
else if(dot<2)
{
if( ((int)word[i]<48 || (int)word[i]>57) && (int)word[i]!=46 )
{
printf("你輸入的字串中包含不正當字元 為錯誤的,請重新再輸入一次!\n");
check=1;
}
if((int)word[i]==46)
dot加加;
i加加;
}
else
{
printf("你輸入的字串中小數點重複 為錯誤的,請重新再輸入一次!\n");
check=1;
}
}
while(i
printf ("你輸入的字串正確!\n");
return 0;
}
功力太差 寫好多 ==
程式判斷 開頭一定要有+-號
小數點個數不能大於等於2
程式要求 一直到你輸入正確值 才跳離
EX :
+123.45 PASS
123.45 FAIL
+123.45.6 FAIL
+0.345E FAIL
2 FAIL
+3 PASS
+3.E FAIL
-E.6 FAIL
本來想去atof atoi 直接去判斷
整數可以 浮點數就沒辦法了 ....
有高手可以CODING簡單一點的嗎
2006-12-20 11:22:48 補充:
另外
getche( )
必須#include
你也可以用stdlib.h內建的
system("PAUSE");來暫停程式 觀看執行結果
dev c 編譯器才需要
linux-gcc vc 應該都不需要額外暫停
其他編譯器 我就不知道哩
2006-12-20 05:50:50 · answer #2 · answered by Anonymous · 0⤊ 0⤋