一个简单的c语言程序,第一个不行,我想知道为什么怎么改? 麻烦了谢谢
#include<stdio.h>intmain(){chara[5];inti,k;for(i=0;i<5;i++)scanf("%c",&a[i]);for(i=0;...
#include<stdio.h>
int main()
{
char a[5];
int i,k;
for(i=0;i<5;i++)
scanf("%c",&a[i]);
for(i=0;a[i]!='\0';i++)
k=a[i];
printf("%c\n",k);
for(i=0;a[i]!='\0';i++)
{
printf("%c",a[i]);
if(a[i+1]!='\0')
printf(" ");
}
printf("\n");
for(i=4;i>=0;i--)
printf("%c",a[i]);
return 0;
}
/*
#include<stdio.h>
int main()
{
char a[5];
int i,k;
for(i=0;i<5;i++)
scanf("%c",&a[i]);
for(i=0;i<5;i++)
k=a[i];
printf("%c\n",k);
for(i=0;i<5;i++)
{
printf("%c",a[i]);
if(i+1<5)
printf(" ");
}
printf("\n");
for(i=4;i>=0;i--)
printf("%c",a[i]);
return 0;
}
*/
我大概知道了,我用的scanf("%c",&a[i]);输入的话,最后一个确定也被挡作字符输入了。 展开
int main()
{
char a[5];
int i,k;
for(i=0;i<5;i++)
scanf("%c",&a[i]);
for(i=0;a[i]!='\0';i++)
k=a[i];
printf("%c\n",k);
for(i=0;a[i]!='\0';i++)
{
printf("%c",a[i]);
if(a[i+1]!='\0')
printf(" ");
}
printf("\n");
for(i=4;i>=0;i--)
printf("%c",a[i]);
return 0;
}
/*
#include<stdio.h>
int main()
{
char a[5];
int i,k;
for(i=0;i<5;i++)
scanf("%c",&a[i]);
for(i=0;i<5;i++)
k=a[i];
printf("%c\n",k);
for(i=0;i<5;i++)
{
printf("%c",a[i]);
if(i+1<5)
printf(" ");
}
printf("\n");
for(i=4;i>=0;i--)
printf("%c",a[i]);
return 0;
}
*/
我大概知道了,我用的scanf("%c",&a[i]);输入的话,最后一个确定也被挡作字符输入了。 展开
1个回答
展开全部
你定义了字符数组a[5],并且通过scanf输入了5个字符,将该数组填满了。
但是,该数组中没有'\0',所以你通过for(i=0;a[i]!='\0';i++)这条语句中a[i]!='\0'去判断就出了问题。
当i=5时,数组已经超界,但a[5]的值到底是什么,谁也说不清楚,可能是0,也可能不是0。那么for语句中采用a[i]!='\0'来判断就有问题了。
解决办法,a[5]定义为a[6],同时在scanf结束后赋值a[5]='\0'即可。这样保证一定在可控范围内满足a[i]=='\0'的条件。
但是,该数组中没有'\0',所以你通过for(i=0;a[i]!='\0';i++)这条语句中a[i]!='\0'去判断就出了问题。
当i=5时,数组已经超界,但a[5]的值到底是什么,谁也说不清楚,可能是0,也可能不是0。那么for语句中采用a[i]!='\0'来判断就有问题了。
解决办法,a[5]定义为a[6],同时在scanf结束后赋值a[5]='\0'即可。这样保证一定在可控范围内满足a[i]=='\0'的条件。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询