当我输出“123”和“0”时,我一直收到垃圾字符。
我能够将其缩小到baseout方法,我相信它可能是我的“for循环”条件之一,但我似乎无法删除垃圾字符。
如果你能提供帮助,请做。计划在C。
提前谢谢。
#include <stdio.h>
#define COUNT 8 /* number of hex digits to display */
#define DECIMAL 10 /* to indicate base 10 */
#define HEX 16 /* to indicate base 16 */
/* array used for ASCII conversion */
const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void baseout (int number, int base, FILE * stream) {
int f1;
int f2;
int index = 0;
int result = number;
char store1[f2];
/*This condition outputs the digit "0" on Line 4*/
if (number == 0) {
fputc(digits[0], stream);
}
/*This condition outputs the digit "0" after "0x"*/
if (base != DECIMAL){
store1[f1] = '0';
fputc(store1[f1], stream);
}
/*This condition outputs codes from bases 2-36*/
if (number != 0) {
for(f2 = 1; f2 < COUNT && result != 0; f2++){
index = result % base;
store1[f2] = digits[index];
result = result / base;
}
}
for (f2 = COUNT; f2 > 0; f2--){
fputc(store1[f2], stream);
}
}
void decout (unsigned int number, FILE * stream) {
/*Passes DECIMAL to baseout algorithm*/
baseout(number, DECIMAL, stream);
}
void hexout (unsigned int number, FILE * stream) {
/* Output "0x" for hexidecimal. */
writeline ("0x", stream);
baseout (number, HEX, stream);
}
void newline (FILE * stream) {
/* Output a newline character */
fputc('\n', stream);
}
int writeline (const char * message, FILE * stream) {
int index = 0;
/*While "index<messagelength" output the each character of message*/
while(message[index] != '\0'){
fputc(message[index], stream);
index++;
}
/*Return the message length*/
return sizeof(message);
}
int main (int argc, char *const* argv) {
writeline ("Hello World", stdout);
fprintf (stderr, "Hola Mundo\n");
newline(stdout);
decout (123, stdout);
newline(stdout);
decout (0, stdout);
newline(stdout);
hexout (0xFEEDDAD, stdout);
newline(stdout);
return 0;
}
所需的输出是:
Hola Mundo
Hello World
123
0
0x0FEEDDAD
当前输出为:
Hola Mundo
Hello World
123
0123
0x0FEEDDAD
答案 0 :(得分:1)
函数baseout中的数组store1未初始化。您的函数不会填充该数组中的每个元素,从而导致垃圾留在某些较高元素中。一种解决方案是在函数开头将数组初始化为所有空格(或零或任何你想要的字符):
for(index = 0; index < COUNT ; index++)
{
store1[index] = ' ';
}
另一种可能性是删除&#34; if(结果!= 0)&#34;检查你的基本功能(第34行)。对于每个具有零的元素,这将在store1数组中存储零。这将导致打印&#34; 0000123&#34;而不是&#34; 123&#34;
答案 1 :(得分:1)
这段代码没有经过深思熟虑。
for(f2 = 1; f2 < COUNT; f2++){
if (result != 0){
index = result % base;
store1[f2] = digit[index];
result = result / base;
}
}
即使f2
为result
并且没有为这些值设置0
的值,您也会递增store1[f2]
。然后你继续尝试打印store1
的内容。由于store1
没有被初始化为任何合理的东西,所以你会得到垃圾。
这是解决这些问题的一种方法。
/*This condition outputs codes from bases 2-36*/
if (number != 0) {
for(f2 = 1; f2 < COUNT && result != 0; f2++){
index = result % base;
store1[f2] = digits[index];
result = result / base;
}
}
for (f2--; f2 > 0; f2--){
fputc(store1[f2], stream);
}