简单的C程序产生空白输出 - 无错误

时间:2015-04-15 09:32:57

标签: c string declaration

我有一个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.

如您所见,输出为空白。编译器显示没有错误或警告。这意味着我必须有某种逻辑错误,但我检查了我的代码到字母,我找不到逻辑错误。除非它是一个其他类型的错误,如字符串变量的定义,一个数组(或者让我有点困惑的东西)。如果有人能帮助我,我将非常感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

for loop条件是循环继续的条件,因此:

for( --i; i < 0; ++j, --i )

应该是:

for( --i; i >= 0; ++j, --i )

答案 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