我想寫一個程式,讀取一個五位數的郵政編碼,然后以文字形式輸出數字。該程式也只接受5位數的數字。因此,如果輸入的是123,輸出將是 "你輸入了3位數",并回圈往復,直到用戶輸入5位數。一旦用戶輸入了五位數,程式就會以文字格式輸出該數字。因此,如果輸入12345,輸出將是1 2 3 4 5。這是我目前所掌握的情況:
}
有兩個問題我需要幫助。第一個問題是,只要輸入一個沒有五位數的數字,它就會正確輸出一次,然后回圈無限。如果我輸入123,輸出將是 "你輸入了3位數",然后它將提示我輸入另一個數字。如果我再輸入12345,它將再次輸出 "你輸入了3位數"。我是回圈系統的新手,不知道這個問題是怎么來的。
第二個問題只是從數字到文字的轉換,我從來沒有遇到過這個問題,我不知道該從哪里開始。
uj5u.com熱心網友回復:
對于第一個問題,如果數字不是5位數,第二個while回圈條件總是評估為假。你必須在每次得到一個新數字時更新count,這意味著你必須重復do ... while回圈。在這種情況下,一個函式將是非常好的,千萬不要忘記檢查scanf()的回傳值,只有這樣你才知道轉換成功了(你掃描了一個數字)。
你的函式可以是這樣的,
int count_digits(int num)
{
int digits = 0;
do; do
{
digits ;
num /= 10;
} while (num != 0) 。
return digits;
}
和你更新的main()
int main(void)
{
int ac = 0, count = 0;
printf("輸入5位區號:")。
if (scanf("%d"/span>, &ac) != 1) /* 你讀一個int */。
{
/* 轉換錯誤 - 也許顯示錯誤資訊 */ {
exit(EXIT_FAILURE)。
}
count = count_digits(ac);
while (count != 5)
{
printf("You intered in %d digits.
", count)。)
printf("輸入5位區號:")。
if (scanf(" %d", & ac) != 1)
{
exit(EXIT_FAILURE); /* include <stdlib.h> for exit */
}
count = count_digits(ac);
}
}
至于你問題的第二部分,不清楚你是否想對該數字進行一些操作。如果你需要將其作為一個int,你可以使用snprintf()和足夠大的緩沖區將其轉換為字串。
char buff[100] = ""/span>。
snprintf(buff, sizeof(buff), "%d"/span>, ac) 。
如果你不需要對數字進行任何操作,你可以馬上把它讀成字串,用fgets()。
char buff[100] = ";
fgets(buff, sizeof(buff), stdin) 。
(這也適用于以0開頭的郵政編碼)
uj5u.com熱心網友回復:
有時,看看是否有辦法簡化方法來做你想做的事,會有幫助。 在這種情況下,也許可以去掉一個while回圈,但仍然保持迭代的能力,直到使用一個輔助函式來完成正確的輸入。
主程式:
int main(void)
{
int num;
char buf[20]={0};
printf("輸入一個5位數的數字:")。
while (!isNumeric(buf))//helper function .
{
printf("try again
:")。)
scanf("%s", buf) 。
}
printf("%s", buf)。
return 0;
}
輔助函式:
bool isNumeric(char *number)
{
bool allgood = false;
if(strlen(number) !=5) return allgood;
while(*number)
{
if(!isdigit(*number))
return allgood。
number ;
}
return true;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309957.html
標籤:
