这是一个非常微不足道的问题,但我不知道为什么我没有得到正确的输出。这是我想要做的:
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等,但它不起作用。请帮忙
答案 0 :(得分: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。
答案 1 :(得分:2)
printf(%s,sendBuffer);
应为printf("%s",sendBuffer);
答案 2 :(得分:2)
更改
sendBuffer[0]=count;
到
sendBuffer[0]='0' + count;
即。将整数0 ... 9转换为字符'0'...'9'
同时添加引用,即printf("%s",sendBuffer);
答案 3 :(得分:1)
要将整数值转换为char表示,请添加字符“0”的值:
sendBuffer[0]=count + '0';
请注意,字符为'0'
,而不是数字0.这是因为ascii values的工作方式。文字值为0的char是\0
,空终止符。数字'0'的字面值为48,'1'49等等。
这适用于数字0-9。显然,你不能把一个数字的char表示大于单个char中的数字。
答案 4 :(得分:1)
引自问题:
在输出中,除第一个缓冲区外,所有缓冲区都正确打印 index.i希望在缓冲区的开头打印1,2,3等等 但它不起作用。请帮忙
我认为她的问题是她没有获得第一行的任何输出。这是因为在第一次迭代中,count为0,即sendBuffer [0]为0,即'\ 0'字符。因此字符串被视为空。
答案 5 :(得分:1)
您正在尝试打印与十进制值0-9相对应的ascii字符,这些字符是不可打印的字符。如果需要打印十进制0-9,则将count初始化为48,这是'0'的ascii十进制代码,并将while块中的条件更改为count&lt; 58; 57是'9'的ascii deciaml代码。见下文:
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;
}
答案 6 :(得分: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);
}