[英]Hex to dec/ dec to hex program. Cannot get program to print string for char array
我正在編寫一個將十六進制轉換為dec並將dec轉換為十六進制的程序。 我編寫了兩個函數:itox(hexstring,n)和int xtoi(hexstring)。 這兩個功能由驅動程序實現。 當我使用printf返回int和hexstring時,hexstring永遠不會出現在輸出中。 另外,該程序似乎從未在xtoi()函數中使用printf語句。 這是我得到的輸出:
--------------:~/cs240/hw3$ gcc showxbits.c xbits.c -o showxbits
--------------:~/cs240/hw3$ ./showxbits
in itox, processing 47
47 0
我是C的新手。以下是我的代碼。 任何建議表示贊賞。
驅動程序代碼為:
1 /*
2 * stub driver for functions to study integer-hex conversions
3 *
4 */
5
6 #include <stdio.h>
7 #include "xbits.h"
8
9 #define ENOUGH_SPACE 100 /* not really enough space */
10
11 int main() {
12 char hexstring[ENOUGH_SPACE];
13 int m = 0, n = 47;
14 itox( hexstring, n);
15 printf("%s", hexstring);
16
17 /* for stub testing: create a fake input string*/
18
19 m= xtoi(hexstring);
20
21 printf("\t%12d %s %12d\n", n, hexstring, m);
22
23 return 0; /* everything is just fine */
24 }
25
26
這兩個函數的代碼是:
1 /*
2 * stubs for functions to study
3 * integer-hex conversions
4 *
5 */
6
7 #include <stdio.h>
8 #include "xbits.h"
9
10 /* function represents the int n as a hexstring which it places in the
11 hexstring array */
12
13 void itox( char hexstring[], int n) {
14 char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
15 int rem;
16 int res = n;
17 int i;
18 for(i = 0; res < 16; i++){
19 rem = res%16;
20 res = res/16;
21 hexstring[i] = hexkey[rem];
22 }
23 i++;
24 hexstring[i] = hexkey[res];
25 i++;
26 hexstring[i] = '\0';
27
28 printf("in itox, processing %d\t%s\n", n, hexstring);
29 }
30
31 /* function converts hexstring array to equivalent integer value */
32
33 int xtoi( char hexstring[]) {
34 int cursor;
35 int count = 0;
36 char current;
37 int dec = 0;
38 int pow = 1;
39 int i;
40 int j;
41 char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
42
43 for(cursor = (2*sizeof(char)); cursor >= 0; --cursor){
44 current = hexstring[cursor];
45 for(i = 0; i < 16; ++i){
46 if(current == hexkey[i]){
47 if(count == 0){
48 dec = dec + i;
49 }
50 else{
51 for(j = 0; j < count; j++)
52 pow = pow * 16;
53 dec = dec + pow*i;
54 pow = 1;
55 }
56 }
57 }
58 ++count;
59 }
60 return dec;
61
62 printf("in xtoi, processing %s\n", hexstring);
63 }
64
缺少單引號
char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
^ ^
0=='\0' ==> Nul character used to terminate strings.
0!='0'
'0' ASCII value 48
在這里你錯了
for(i = 0; res < 16; i++){
^
rem = res%16;
res = res/16;
hexstring[i] = hexkey[rem];
}
for循環條件錯誤。
n==47 ==> res==47 and res<16 ==> 47 < 16 failed.
像這樣修改
for(i = 0; res >0; i++)
{
rem = res%16;
res = res/16;
hexstring[i] = hexkey[rem];
}
hexstring[i] = '\0';
printf("in itox, processing %d==%s\n", n, hexstring); // You need to reverse it.
我沒有足夠的代表發表評論。 這篇文章對我幫助很大。 如果還有其他人遇到這個問題,為什么他的第二個函數不打印是因為他的return語句在他的printf語句之前。 如果要翻轉它們:
printf("in xtoi, processing %s\n", hexstring);
return dec;
然后第二個功能將打印該行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.