C-printf打印随机字符而不是数组内容



我正在制作一个程序,使用if-else或switch,无循环或其他复杂的东西,用单词打印数字0-999。程序打印整数433四百四十三。不仅仅是四三三。我已经制作了数字1-9的字符数组,这样我就可以使用这样的模板来使单词正确。我想我已经完成了,我没有犯任何错误,我甚至一遍又一遍地检查它。问题是它没有打印数组内容。相反,它会打印像@my.这样的随机字符

很抱歉,这个程序是我的母语,satuan的意思是一,puluhan的意思是十,ratusan的意思是几百。例如,当我输入455时,它应该输出empat ratus lima puluh lima(empat是四,lima是五(。但它却打印出了"M y ratus??!"puluh??!@,每次我再试一次,字符都是随机的。

有人能告诉我怎么了吗?

#include <stdio.h>
#include <math.h>
int main()
{
int input, a, b, c;
char satuan[100], puluhan[100], ratusan[100];
scanf("%d", &input);
c = input%10;
b = (input%100-(input%10))/10;
a = input/100;
if(input==0){
printf("noln");
}
else if(input==10){
printf("sepuluhn");
}
else if(input==11){
printf("sebelasn");
}
else if(input==12){
printf("dua belasn");
}
else if(input==13){
printf("tiga belasn");
}
else if(input==14){
printf("empat belasn");
}
else if(input==15){
printf("lima belasn");
}
else if(input==16){
printf("enam belasn");
}
else if(input==17){
printf("tujuh belasn");
}
else if(input==18){
printf("delapan belasn");
}
else if(input==19){
printf("sembilan belasn");
}
else if(input==101){
printf("seratus satun");
}
else if(input==102){
printf("seratus duan");
}
else if(input==103){
printf("seratus tigan");
}
else if(input==104){
printf("seratus empatn");
}
else if(input==105){
printf("seratus liman");
}
else if(input==106){
printf("seratus enamn");
}
else if(input==107){
printf("seratus tujuhn");
}
else if(input==108){
printf("seratus delapann");
}
else if(input==109){
printf("seratus sembilann");
}
else {
if(c==1){
char satuan[100] = {'s','a','t','u'};
}
else if(c==2){
char satuan[100] = {'d','u','a'};
}
else if(c==3){
char satuan[100] = {'t','i','g','a'};
}
else if(c==4){
char satuan[100] = {'e','m','p','a','t'};
}
else if(c==5){
char satuan[100] = {'l','i','m','a'};
}
else if(c==6){
char satuan[100] = {'e','n','a','m'};
}
else if(c==7){
char satuan[100] = {'t','u','j','u','h'};
}
else if(c==8){
char satuan[100] = {'d','e','l','a','p','a','n'};
}
else if(c==9){
char satuan[100] = {'s','e','m','b','i','l','a','n'};
}

if(b==1){
char puluhan[100] = {'s','a','t','u'};
}
else if(b==2){
char puluhan[100] = {'d','u','a'};
}
else if(b==3){
char puluhan[100] = {'t','i','g','a'};
}
else if(b==4){
char puluhan[100] = {'e','m','p','a','t'};
}
else if(b==5){
char puluhan[100] = {'l','i','m','a'};
}
else if(b==6){
char puluhan[100] = {'e','n','a','m'};
}
else if(b==7){
char puluhan[100] = {'t','u','j','u','h'};
}
else if(b==8){
char puluhan[100] = {'d','e','l','a','p','a','n'};
}
else if(b==9){
char puluhan[100] = {'s','e','m','b','i','l','a','n'};
}

if(a==1){
char ratusan[100] = {'s','a','t','u'};
}
else if(a==2){
char ratusan[100] = {'d','u','a'};
}
else if(a==3){
char ratusan[100] = {'t','i','g','a'};
}
else if(a==4){
char ratusan[100] = {'e','m','p','a','t'};
}
else if(a==5){
char ratusan[100] = {'l','i','m','a'};
}
else if(a==6){
char ratusan[100] = {'e','n','a','m'};
}
else if(a==7){
char ratusan[100] = {'t','u','j','u','h'};
}
else if(a==8){
char ratusan[100] = {'d','e','l','a','p','a','n'};
}
else if(a==9){
char ratusan[100] = {'s','e','m','b','i','l','a','n'};
}
}
if(a==0 && b==0){
printf("%s", satuan);
}
else if (a==0){
printf("%s puluh %s", puluhan, satuan);
}
else{
printf("%s ratus %s puluh %s", ratusan, puluhan, satuan);
}
return 0;
}

问题是,在每个if...else条件体中,变量satuan都是(重新(本地定义的,并且范围只到体的末尾。您试图打印的变量仍然未初始化,其内容是不确定的。

将分配更改为

strcpy(satuan, "whatever value");

让我们以这里的代码为例:

if(c==1){
char satuan[100] = {'s','a','t','u'};
}

在这里,您在if语句块的作用域内定义了一个名为satuan第二个变量,而在if语句块的范围内仅定义了

一旦这个块结束(}关闭(,这个变量就不存在了,它的生命周期也结束了。

这将留下第一个未初始化的satuan数组。

与所有其他数组定义相同。

解决方案是使用现有的satuan阵列,并复制要打印到其中的字符串:

if(c==1){
strcpy(satuan, "satu");
}

最新更新