当我运行下面的代码时,我得到了这个输出:
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;
}
为什么呢?怎么解决?我只想按相反的顺序输入数字。
答案 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
用于scanf
和printf
,你应该使用%d
。