求大神解释下这个C语程序
有两个问题。为什么是i-2,虽然是我自己编的,但是经过调试只知道i-1会出现一个随机数为什么输入的第一个数的第一个字符会不见?P.S。程序目的是输入一组数,然后存入数组反...
有两个问题。
为什么是i-2,虽然是我自己编的,但是经过调试只知道i-1会出现一个随机数
为什么输入的第一个数的第一个字符会不见?
P.S。程序目的是输入一组数,然后存入数组反向输出 展开
为什么是i-2,虽然是我自己编的,但是经过调试只知道i-1会出现一个随机数
为什么输入的第一个数的第一个字符会不见?
P.S。程序目的是输入一组数,然后存入数组反向输出 展开
3个回答
展开全部
先分析你第一个while循环,你这样写,每次循环都要先读入一个字符,判断是否是N,再判断能否写入数到数组。举个例子,你输入12, 1是一个字符,1不等于N,所以你读入2到数组a[0],i++变为1。你按回车键,回车键算一个字符,且不是N,所以你输入421到数组a[1],i++变为2。同样道理,这就解释了你为什么第一个数的第一个字符不见的原因。
为什么是i-2,其实很简单,你的i++已经不在else 里面了,你每次不管有没有else,i++都是执行的,因为你少了个发括号
为什么是i-2,其实很简单,你的i++已经不在else 里面了,你每次不管有没有else,i++都是执行的,因为你少了个发括号
追问
可是为什么我输n的时候确实会结束输入啊,其他的字母不会结束,按你说的应该不是不该结束么?因为c都是回车。
追答
你读入回车的时候,回车不等于n,所以不用break。然后你输入n,因为n不是浮点数,所以后续的代码没有被执行,所以又循环了一次,这时候字符c就被赋值为刚刚的n,所以break.
以下是测试,如果没问题了,求采纳
#include
main()
{
int i=0,n=0;
char c;
float a[1000],b[1000] ;
while(1)
{
scanf("%c",&c);
printf("c=%c\n",c);//测试点
if(c=='n') break ;
else scanf("%f",&a[i]) ;
i++ ;
printf("i=%d\n",i);//测试点
}
for(;i>1;i--)
{
printf("%f\n",a[i-2]);
}
}
展开全部
你的两个问题其实是一个,因为你的第一个字符给c了,所以第一个数少了一个字符,而后面的c读取的是回车,所以就不少了。
然后结束循环的时候也是一样,先读了个回车,然后试图读取a[i],但是这时候你输入的是n,所以每读到,然后就结束了。所以是i-2才是输入的最后一个数
然后结束循环的时候也是一样,先读了个回车,然后试图读取a[i],但是这时候你输入的是n,所以每读到,然后就结束了。所以是i-2才是输入的最后一个数
追问
那我怎么才能完成我想要的目的呢?如果不事先确定数组的个数,那么我怎么才能让程序判定我结束了输入呢?PS。目前只学到数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个程序最大的问题是你根本没有理解清楚他想要做什么!这个是想要你输入一组数,并不是想让你反向输出一个字符串,所以你的输入方式可能不正确!
输入数的函数(从main)开始写,头文件省略
#define N 100
int main(void)
{
int arr[N] = {0};
int i = 0;
printf("请输入一组数\n");
while(scanf("%d",&arr[i++]));
i--;
while(i>=0)
{printf("%d\n",arr[i]);}
return 0;
}
你上面的那个问题,是%f输入的时候,编译器自动把你的输入转成double类型,因为你是用%f输入,这个涉及到内部的存储一些问题,你可以调试的时候看下地址!float占4字节,double占8字节,所以你必须减2才可以成功赋值!中间出现随机是因为你读取的随机数那一段刚好使没有存储东西,编译器的优化会导致你读取的是一个最大数!
输入数的函数(从main)开始写,头文件省略
#define N 100
int main(void)
{
int arr[N] = {0};
int i = 0;
printf("请输入一组数\n");
while(scanf("%d",&arr[i++]));
i--;
while(i>=0)
{printf("%d\n",arr[i]);}
return 0;
}
你上面的那个问题,是%f输入的时候,编译器自动把你的输入转成double类型,因为你是用%f输入,这个涉及到内部的存储一些问题,你可以调试的时候看下地址!float占4字节,double占8字节,所以你必须减2才可以成功赋值!中间出现随机是因为你读取的随机数那一段刚好使没有存储东西,编译器的优化会导致你读取的是一个最大数!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询