題目是:
Print the decimal, octal, and hexadecimal values of all characters between the start and stop characters entered by a user. For example, if the user enters an a and z, the program should print all the characters between a and z and their respective numerical values. Make sure that the second character entered by the user occurs later in the alphaber than the first character. If it does not, write a loop that repeatedly asks theuser for acalid second character until one is entered.
跑出來的8進位和16進位都是錯的~
請幫我修改程式以及告訴我為什麼~
感謝你的幫忙ˇˇ
#include
#include
int main()
{
int a,b;
int i;
char str8[100],str16[100];
printf("請輸入兩個數 a b :\n");
scanf("%d %d",&a,&b);
do{
while (a > b)
{
printf("請重新輸入!!!(b > a) : \n");
scanf("%d %d",&a,&b);
}
if (b > a)
{
for(i = a ; i <= b ; i++)
{
printf("%d ",i);
printf("%d ",itoa(i,str8,8));
printf("%d ",itoa(i,str16,16));
printf("\n");
}
}
}while(a > b);
system("pause");
return 0;
}
2007-02-03 09:46:44 · 2 個解答 · 發問者 亭 2 in 電腦與網際網路 ➔ 程式設計
題目:設計一程式,假設當使用者輸入 a 至 z 這兩個起始與結束的英文字母時,程式必須輸出 a 至 z 之間所有字母的十進制、八進制、十六進制的數值。如果結束英文字母不是起始英文字母後面的字母,必須重複要求使用者重新輸入,直到正確為止。
你的錯誤:
一、要求輸入的是字元,不是數字。
二、itoa 函式傳回的是字串 %s
三、在 C 語言裡,字元可視同數值。
程式改寫:
//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
int main(int argc, char *argv[]){
//=====START=====//
int i;
char chInput[3]="az";
do{
printf("Input START and END charaters\\n(ex: az, AZ, ...): ");
scanf("%s",chInput);
}while(chInput[0]>chInput[1]);
printf("CHAR DEC OCT HEX\\n");
for(i=chInput[0];i
}
//=====END=====//
system("PAUSE");
return 0;
}
2007-02-03 11:06:10 · answer #1 · answered by Big_John-tw 7 · 0⤊ 0⤋
你使用 itoa 函式來轉換數字成字元,使用方式是沒錯,但是外面 printf 接回傳值的方式有問題,因為 itoa 輸出的是 char* 型態,是一個字串的指標,所以你應該這麼接:
printf("%s ",itoa(i,str8,8));
printf("%s ",itoa(i,str16,16));
另外,要列印 10 進位、8 進位、16 進位也沒有這麼麻煩,用 printf 就能做到:
printf("%d %o %x \n", i, i, i);
%d 可以印出 i 的 10 進位值、%o 可以印出 i 的 8 進位值、%x 可以印出 i 的 16 進位值,這樣就可以了。
2007-02-03 11:16:28 · answer #2 · answered by ? 5 · 0⤊ 0⤋