简单的 C 程序产生空白输出 - 没有错误
Simple C program produces Blank Ouput - No Errors
我有一个 C 程序,它将输入的整数转换为等效的字符串,即字符数组。例如,整数 245 应该是 '2'、'4'、'5'、'\0'。而整数-493 应该是'-'、'4'、'9'、'3'、'\0'。
它是 Stephen Kochan 着的《C 语言编程》(第三版)一书第 10 章的练习 14。
我的代码:
#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] = '[=10=]';
printf("%s\n", stringInt );
return 0;
}
输出:
Process returned 0 (0x0) execution time : 0.014 s Press any key to
continue.
如您所见,输出为空白。编译器没有显示错误或警告。这意味着我一定有某种逻辑错误,但我已经仔细检查了我的代码,但我找不到逻辑错误。除非它是另一种错误,比如字符串变量的定义、数组(或让我有点困惑的东西)。如果有人能帮助我,我将不胜感激。提前谢谢你。
for( --i; i < 0; ++j, --i )
应该是
for( --i; i >= 0; ++j, --i )
否则,循环永远不会执行并且您在 stringInt
的第一个槽中设置了 NUL 终止符。因此,printf
什么都不打印,只打印一个换行符。
for( --i; i < 0; ++j, --i )
stringInt[j] = tempInt[i];
你的逻辑有问题。当满足条件 i < 0
但从未满足条件时执行此循环,因为您的 i
在您的程序中应该是 >= 0
。
for loop条件就是循环继续的条件,所以:
for( --i; i < 0; ++j, --i )
应该是:
for( --i; i >= 0; ++j, --i )
我有一个 C 程序,它将输入的整数转换为等效的字符串,即字符数组。例如,整数 245 应该是 '2'、'4'、'5'、'\0'。而整数-493 应该是'-'、'4'、'9'、'3'、'\0'。 它是 Stephen Kochan 着的《C 语言编程》(第三版)一书第 10 章的练习 14。 我的代码:
#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] = '[=10=]';
printf("%s\n", stringInt );
return 0;
}
输出:
Process returned 0 (0x0) execution time : 0.014 s Press any key to
continue.
如您所见,输出为空白。编译器没有显示错误或警告。这意味着我一定有某种逻辑错误,但我已经仔细检查了我的代码,但我找不到逻辑错误。除非它是另一种错误,比如字符串变量的定义、数组(或让我有点困惑的东西)。如果有人能帮助我,我将不胜感激。提前谢谢你。
for( --i; i < 0; ++j, --i )
应该是
for( --i; i >= 0; ++j, --i )
否则,循环永远不会执行并且您在 stringInt
的第一个槽中设置了 NUL 终止符。因此,printf
什么都不打印,只打印一个换行符。
for( --i; i < 0; ++j, --i )
stringInt[j] = tempInt[i];
你的逻辑有问题。当满足条件 i < 0
但从未满足条件时执行此循环,因为您的 i
在您的程序中应该是 >= 0
。
for loop条件就是循环继续的条件,所以:
for( --i; i < 0; ++j, --i )
应该是:
for( --i; i >= 0; ++j, --i )