我有一个C程序,它将输入整数转换为等效字符串,即字符数组。例如,整数245应该是'2','4','5','\ 0'。整数-493应该是' - ','4','9','3','\ 0'。 这是第10章的练习14,由Stephen Kochan撰写的“C编程(第三版)”一书。 我的代码:
#include <stdio.h>
int main ( void ){
int integer = 245;
const char stringIntegers[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
int i = 0, j = 0;
char tempInt[10], stringInt[10];
// Checks whether the input integer is negative in order to store a '-', in [0] of the output string
if ( integer < 0 ){
stringInt[0] = '-';
j = 1;
integer = -integer;
}
// extract digits of the input integer and store them, in opposite order (last to first digit), in temporary string
while ( integer ){
tempInt[i] = stringIntegers[integer % 10];
integer /= 10;
++i;
}
// now store them in the right order to output string
for( --i; i < 0; ++j, --i )
stringInt[j] = tempInt[i];
// Finally, copy the null zero terminator to output string
stringInt[j] = '\0';
printf("%s\n", stringInt );
return 0;
}
输出:
Process returned 0 (0x0) execution time : 0.014 s Press any key to
continue.
如您所见,输出为空白。编译器显示没有错误或警告。这意味着我必须有某种逻辑错误,但我检查了我的代码到字母,我找不到逻辑错误。除非它是一个其他类型的错误,如字符串变量的定义,一个数组(或者让我有点困惑的东西)。如果有人能帮助我,我将非常感激。提前谢谢。
答案 0 :(得分:2)
答案 1 :(得分:1)
for( --i; i < 0; ++j, --i )
应该是
for( --i; i >= 0; ++j, --i )
否则,循环永远不会执行,您在stringInt
的第一个槽中设置NUL终止符。因此,printf
不打印,而是换行。
答案 2 :(得分:1)
for( --i; i < 0; ++j, --i )
stringInt[j] = tempInt[i];
你有一个逻辑问题。当满足条件i < 0
但从未满足条件时执行此循环,因为您的i
应该是程序中的>= 0
。