4

这是一个非常微不足道的问题,但我不知道为什么我没有得到正确的输出。这是我正在尝试做的事情:

char sendBuffer[1000];
int count=0:
while(count<10)
{
    sendBuffer[0]=count;
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';
    printf(%s,sendBuffer);
    count=count+1;
}

在输出中,除了第一个索引之外,所有缓冲区都正确打印。我希望在缓冲区的开头打印 1,2,3 等,但它不起作用。请帮忙

4

7 回答 7

6

您需要将该数字转换为字符。一个便宜的方法是:

sendBuffer[0] = '0' + count;

无论如何显示大于9的整数

如果您需要,您将希望转向更精细的方案。例如,如果您想将整数 42 转换为字符串“42”,您可以说:

#define ENOUGH ((CHAR_BIT * sizeof(int) - 1) / 3 + 2)

char str[ENOUGH];
snprint(str, sizeof str, "%d", 42);

ENOUGH归功于caf 。_

于 2013-03-09T08:33:49.623 回答
2

printf(%s,sendBuffer);应该printf("%s",sendBuffer);

于 2013-03-09T08:33:31.487 回答
2

改变

sendBuffer[0]=count;

sendBuffer[0]='0' + count;

即将整数 0...9 转换为字符 '0' ... '9'

还要添加报价,即printf("%s",sendBuffer);

于 2013-03-09T08:35:12.357 回答
1

要将整数值转换为 char 表示形式,请添加字符 '0' 的值:

sendBuffer[0]=count + '0';

请注意,这是字符'0',而不是数字 0。这是因为ascii 值的工作方式。字面值为 0 的 char 是\0空终止符。数字“0”的字面值是 48,“1”是 49,依此类推。

这适用于数字 0-9。显然,您不能将大于单个字符的数字的字符表示形式放在单个字符中。

于 2013-03-09T08:38:05.057 回答
1

从问题中引用:

在输出中,除了第一个索引之外,所有缓冲区都正确打印。我希望在缓冲区开始时打印 1、2、3 等,但它不起作用。请帮忙

我认为她的问题是她没有得到第一行的任何输出。这是因为在第一次迭代中,count 为 0,即 sendBuffer[0] 为 0,即 '\0' 字符。因此,字符串被视为空。

于 2013-03-09T08:39:30.393 回答
1

您正在尝试打印与十进制值 0-9 对应的 ascii 字符,这些字符是不可打印的字符。如果您需要打印十进制 0-9,则将 count 初始化为 48,这是 '0' 的 ascii 十进制代码,并将 while 块中的条件更改为 count < 58;57 是 '9' 的 ascii 十进制代码。见下文:

char sendBuffer[1000];
int count=48:
while(count<58)
{
    sendBuffer[0]=count;
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';
    printf(%s,sendBuffer);
    count=count+1;
}
于 2013-03-09T08:45:20.723 回答
0
char sendBuffer[1000];

// take fixed stuff outside the loop
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';

// it's best not to rely on order of ASCII values

for(char* numbers="0123456789"; *numbers!=0; numbers++){// use for loop for numbers
    sendBuffer[0] = *numbers;

    printf("%s",sendBuffer);
}
于 2013-03-09T09:27:09.163 回答