int值的printf只返回第一个字符

时间:2014-11-12 18:21:15

标签: c codelite

当我运行下面的代码时,我得到了这个输出:

  

Podaj ilosc liczb:12

     

Podaj liczbe nr。 0:53

     

Podaj liczbe nr。 1:24

     

Podaj liczbe nr。 2:53

     

Podaj liczbe nr。 3:24

     

Podaj liczbe nr。 4:66

     

Podaj liczbe nr。 5:99

     

Podaj liczbe nr。 6:3

     

Podaj liczbe nr。 7:0

     

Podaj liczbe nr。 8:5

     

Podaj liczbe nr。 9:2

     

Podaj liczbe nr。 10:5

     

Podaj liczbe nr。 11:2   Twoje liczby w odwrotnej kolejnosci:    2 5 2 5 0 3 9 6 2 5 2 5

#include <stdio.h>

int main(int argc, char **argv)
{

char tablo[100];
int k,i;
printf("Podaj ilosc liczb: ");
scanf("%d", &k);fflush(stdin);
for(i=0; i<k; i++){
                 printf("\nPodaj liczbe nr. %d : ", i);
                 scanf("%c", &tablo[i]);fflush(stdin);
                 }
printf("Twoje liczby w odwrotnej kolejnosci: \n");
for(i=k-1;i>=0;i--){
                    printf("%3c",tablo[i]);
                    }
                    printf("\n \n");

return 0;
}

为什么呢?怎么解决?我只想按相反的顺序输入数字。

3 个答案:

答案 0 :(得分:1)

您正在阅读和编写单个字符,而不是整数。尝试使用x*作为输入来运行您的程序;它只会打印你给它的字符而不试图将它们解释为十进制整数。

要读取整数(将序列"123"解释为十进制数123),请使用scanf("%d", ...)读取int个对象,并使用printf("%d", ...)打印值 - 并将tablo定义为int而不是char的数组。 (并且不要忘记检查scanf返回的值,以便判断它是成功还是失败。)

不要使用fflush(stdin)fflush对输入流的行为是未定义的,您无论如何都不需要它。稍后您可能想要一种丢弃无效输入的方法,但fflush不是答案。

答案 1 :(得分:1)

%c转换说明符告诉scanf从输入流中读取单个字符;键入“53”时,只会读取字符'5'。如果您想要读取数字值并将其存储在char数据类型中,则需要使用%hhd转换说明符:

scanf( "%hhd", &tablo[i] );

请注意,如果您要存储任何大于128的值,则需要使用更广泛的数据类型,例如int和适当的转化说明符%d int%hd short%ld long等。

请勿在{{1​​}}等输入流上使用fflush;行为没有定义,它可能不会做你想要的。

答案 2 :(得分:0)

您只扫描单个字符,而不是实际数字。相反,tablo应该是int(不是char)的数组,而不是%c用于scanfprintf,你应该使用%d