c语言定义一个数组的一个问题

> C语言结构程序问题该程序在运行第一个循环的时候第一次可以正常执行,但是第二次执行的时候会跳过Fna
C语言结构程序问题该程序在运行第一个循环的时候第一次可以正常执行,但是第二次执行的时候会跳过Fna
wangjunn & &
发布时间: & &
浏览:8 & &
回复:2 & &
悬赏:0.0希赛币
程序问题该程序在运行第一个循环的时候第一次可以正常执行,但是第二次执行的时候会跳过Fname的输入请求也直接请求输入Mname,输出结果也没有第二次的Fname,请问各位大神这是因为什么。。源码如下:#include&stdio.h$>$ struct name{char fname[20];char lname[20];} ;& struct inform{} ;int main(void) {& void output(struct inform c);struct inform ca[2]; //定义结构数组int i=0,j=0;while(i&2){printf(&Fname:\n&);gets(&ca[i].na.fname);printf(&Mname\n&);scanf(&%c&,&ca[i].na.mname);& while(getchar()!='\n') //丢掉本行其余的输入printf(&Lname\n&);gets(&ca[i].na.lname);printf(&Num:\n&);scanf(&%d&,&ca[i].num);i++;}for(j=0;j&2;j++)output(ca[j]);getch();return 0;}& void output(struct inform c){printf(&%s %s %c. %d\n&,c.na.fname,c.na.lname,c.na.mname,c.num);& }
scanf(&%d&,&ca[i].num);getchar();//应该可以了,你可以试试i++;
wangjunsmr & &
& & (0)(0)
i/o 缓冲区问题,在第二次循环时将第一轮循环最后输入的“回车”或者“换行符”自动读入了gets(&ca[i].na.fname);所取得的fname中。修改方法:(1)scanf(&%d&,&ca[i].num);&getchar();(2)i++;在下面2行中插入一个getchar();将“换行符”或“回车符”忽略。wangjunwen & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-C语言的一个问题_百度知道
C语言的一个问题
若要求从键盘读入含有空格字符的字符串,应使用函数
C) getchar()
D) scanf() 如果题目为“不包含空格”应该选哪个?另外,scanf()为什么不选?
提问者采纳
gets()函数可以从键盘输入字符串 在遇到回车时停止输入scanf(&%S&,...)也可以输入字符串 但是遇到空格和回车结束所以 scanf() 输入有空格的字符串不行getchar()是从键盘输入一个字符~遇回车结束注意: 因为这个函数是遇到回车结束 所以如果有这么个程序int main(){
c=getchar();
printf(&%c&,c);return 0;}你从键盘输入 ABCD程序结果 是A 此时需要注意 BCD也一并存入了文件缓冲区所以如果你在别的函数中在getchar()的话 显示出来的 就不是你从键盘输入的那个字符了 而是B 所以应该头文件包含 include&conio.h&在函数结束时 fflush(stdin) (清空缓冲区)更好的函数有 如下2个函数只读你输入的第一个字符到缓冲区getch()
键入的字符不显示getche() 键入的字符显示够详细吧
其他类似问题
为您推荐:
其他3条回答
选B,可以看下下面的几个输入区别getc():调用方式:int getc(FILE *stream)它返回指定输入流stream的当前位置的下一个字符,并增加文件的位置指示器.getch():调用方式:int getch(void)getch()从控制台读取一个字符,但不把该字符显示在屏幕上,也就是不回显.getche():调用方式:int getche(void)getchar()从控制台读取一个字符,把该字符显示在屏幕上,也就是回显.getchar():调有方式:int getchar(void)getchar()从控制台读取一个字符,并回显,它和getch(),getche()的不同在于,它等到输入一个回车才结束,就算你输入了一个字符串,它也只取其中的第一个字符.上面的四个函数不是在stdio.h里,就是在conio.h里,我没有多试,和编译环境有关系.
选B不选scanf()是因为scanf()中的空格 Tab键 Enter键是用来间隔参数列的而你输入一个字符串(即就是只有一个参数)用空格的话会把字符串截断的不包含空格选D(用%s)
选折B.书上也有这类说明.
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于C语言,无符号整数的一个问题。_百度知道
关于C语言,无符号整数的一个问题。
如下程序:#include&stdio.h&void main (){int
a=-400; printf(“a=%u\n”,a);}该程序输出结果为a=书上解释说使用%u格式控制字符串输出正整数时该数不发生变化,输出负整数时该负整数将被转换为无符号整数输出。后一句话具体什么意思?没太懂…麻烦高人指点。。。
我有更好的答案
首先这里是无符号和有符号之间的区别, 在这里我们将他们实现为二进制后, 楼主你会更好的理解他们之间的区别, 而且这部分的题目是面试题常考的
int a = -400;
在这里a被定义成了一个有符号的整数, 且值为-400;
在计算机中的二进制为
11 11 11 11 11 0000
有符号的解释出来的值为-400, 但是无符号解释出来的值却不同
而printf(“a=%u\n”,a);
很明显这里是要将a按无符号的形式输出(%u)
所以要将a按无符号的形式解释
11 11 11 11 11 0000
解释成无符号的形式
就a值就变成了
书上解释说使用%u格式控制字符串输出正整数时该数不发生变...
要知道计算机里是用补码来表示整型。以8位为例子,二进制表示范围为0~255,即100~分别代表无符号整型(unsigned)0~255,而有符号不同,11111表示-128~-1, 11111表示0~127,这么表示的原因是为了计算方便,具体可以上网搜补码。有符号数转无符号数即转变表示方式,值不变,例,在无符号里表示255,在有符号里表示-1。可以类推到32位(int)
就是说,printf(&%u\n&,1);的输出结果就是1,而printf(&%u\n&,-1);则输出,即把-1的补码0xFFFFFFFF当一个正数来输出了。
其他类似问题
为您推荐:
无符号整数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&& 查看话题
一个区间搜索的c语言程序
我写了个搜索 大-小-大 区间的程序 ,但最后运行结果始终是错的,不清楚哪里有问题(演算过 逻辑上是正确的)求虫友们帮帮忙
int a,b,x0,x1,x2,h,f0,f1,f2;
printf("please input the number\n");
scanf("x0=%d,h=%d",&x0,&h);
& & h=2*h;
& & x2=x0+h;
& & f2=f(x2);
& & for(f1,f2;f2<f1;f0,f1,f2)
& && && && &x0=x1;
& && && && &x1=x2;
& && && && &x2=x1+h;
& && && && &f0=f(x0);
& && && && &f1=f(x1);
& && && && &f2=f(x2);
& & x2=x0+h;
& & f2=f(x2);
& & for(f0,f2;f2<f0;f0,f1,f2)
& && && && &x1=x0;
& && && && &x0=x2;
& && && && &x2=x0+h;
& && && && &f0=f(x0);
& && && && &f1=f(x1);
& && && && &f2=f(x2);
printf("a=%d,b=%d\n",a,b);
int f(int n)
return 2+n^2;
什么是大小大区间的程序呀,没明白是什么意思,能解释点清楚么,你的代码实在太难看了~:rol: 我曾经编过类似的程序,大 - 小 - 大区间是用来确定凹函数的极值区间的,这段程序是用来求解凹函数的极值区间并求极值的吧,我直接站过来吧
/****************************************************************
*& & & & 名称 :& & & & 确定搜索区间的外推法& && && && && && && && && && && & & & *
*& & & & 说明 :& & & & 假设函数f( x )具有单谷性,即在所考虑的区间内部,&&& & & & *
*& & & & & & & && && & & & 函数f( x )有唯一的极小点x0。为了确定极小点x所在& && & & & *
*& & & & & & & && && & & & 的区间,应使函数f( x )在区间内形成& && &&&& & & & *
*& & & & & & & && && & & & “高-低-高”趋势。& && && && && && && && && && &&&& & & & *
*& & & & 作者 :& & & & ***& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
*& & & & 日期 :& & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
****************************************************************/
/****************************************************
*& & & & 函数声明& & & & & & & & & & & & & & & && && && && && && && && & & & *
****************************************************/
double f( double );
/****************************************************
*& & & & 主函数& & & & & & & & & & & & & & & & & & & && && && && && && && && & & & *
****************************************************/
int main( void )
& & & & double x_1, x_2, x_3;& & & & & & & & & & & & //定义横坐标
& & & & double y_1, y_2, y_3;& & & & & & & & & & & & //定义相应的纵坐标,以减少调用函数的次数,以前没有想到这一点,程序中的重复计算越少越好
& & & && & & & & & & & & & & & & & & & & & & & & & & & //搜索步长
& & & && & & & & & & & & & & & & & & & & & & & & & & & //中间变量
& & & & //初始化搜索
& & & & step = 1;& & & & & & & & & & & & & & & & & & & & & & & & //step的初值对搜索次数影响不大,因为调整时是按照幂次& & & & & & & & & & & & & & & & & & & &
& & & & x_1 = 0;& & & & & & & & & & & & & & & & & & & & & & & & //x_1对搜索次数的影响很大
& & & & y_1 = f( x_1 );
& & & & x_2 = x_1 +
& & & & y_2 = f( x_2 );
& & & & //开始搜索
& & & & if( y_2 > y_1 )& & & & & & & & & & & & & & & & & & & & //调整搜索方向
& & & & & & & & step = -& & & & & & & & & & & & & & & & //C语言中有负号运算符
& & & & & & & & tmp = x_1;& & & & & & & & & & & & & & & & & & & & //对x_1和x_2进行交换
& & & & & & & & x_1 = x_2;
& & & & & & & & x_2 =
& & & & & & & & tmp = y_1;& & & & & & & & & & & & & & & & & & & & //对y_1和y_2进行交换
& & & & & & & & y_1 = y_2;
& & & & & & & & y_2 =
& & & & else& & & & & & & & & & & & & & & & & & & & & & & & & & & & //空语句可以增加程序的易读性
& & & & & & & & ;
& & & & } :tiger39:刚刚没有全选
/****************************************************************
*& & & & 名称 :& & & & 确定搜索区间的外推法& && && && && && && && && && && & & & *
*& & & & 说明 :& & & & 假设函数f( x )具有单谷性,即在所考虑的区间内部,&&& & & & *
*& & & & & & & && && & & & 函数f( x )有唯一的极小点x0。为了确定极小点x所在& && & & & *
*& & & & & & & && && & & & 的区间,应使函数f( x )在区间内形成& && &&&& & & & *
*& & & & & & & && && & & & “高-低-高”趋势。& && && && && && && && && && &&&& & & & *
*& & & & 作者 :& & & & ***& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
*& & & & 日期 :& & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
****************************************************************/
/****************************************************
*& & & & 函数声明& & & & & & & & & & & & & & & && && && && && && && && & & & *
****************************************************/
double f( double );
/****************************************************
*& & & & 主函数& & & & & & & & & & & & & & & & & & & && && && && && && && && & & & *
****************************************************/
int main( void )
& & & & double x_1, x_2, x_3;& & & & & & & & & & & & //定义横坐标
& & & & double y_1, y_2, y_3;& & & & & & & & & & & & //定义相应的纵坐标,以减少调用函数的次数,以前没有想到这一点,程序中的重复计算越少越好
& & & && & & & & & & & & & & & & & & & & & & & & & & & //搜索步长
& & & && & & & & & & & & & & & & & & & & & & & & & & & //中间变量
& & & & //初始化搜索
& & & & step = 1;& & & & & & & & & & & & & & & & & & & & & & & & //step的初值对搜索次数影响不大,因为调整时是按照幂次& & & & & & & & & & & & & & & & & & & &
& & & & x_1 = 0;& & & & & & & & & & & & & & & & & & & & & & & & //x_1对搜索次数的影响很大
& & & & y_1 = f( x_1 );
& & & & x_2 = x_1 +
& & & & y_2 = f( x_2 );
& & & & //开始搜索
& & & & if( y_2 > y_1 )& & & & & & & & & & & & & & & & & & & & //调整搜索方向
& & & & & & & & step = -& & & & & & & & & & & & & & & & //C语言中有负号运算符
& & & & & & & & tmp = x_1;& & & & & & & & & & & & & & & & & & & & //对x_1和x_2进行交换
& & & & & & & & x_1 = x_2;
& & & & & & & & x_2 =
& & & & & & & & tmp = y_1;& & & & & & & & & & & & & & & & & & & & //对y_1和y_2进行交换
& & & & & & & & y_1 = y_2;
& & & & & & & & y_2 =
& & & & else& & & & & & & & & & & & & & & & & & & & & & & & & & & & //空语句可以增加程序的易读性
& & & & & & & & ;
& & & & x_3 = x_2 +& & & & & & & & & & & & & & & & //为了减少代码的长度,应该修改成do...while的形式
& & & & y_3 = f( x_3 );& & & & & & & & & & & & & & & & & & & & //但修改之后,逻辑性不强
& & & & while( y_3 < y_2 )
& & & & & & & & x_1 = x_2;
& & & & & & & & x_2 = x_3;
& & & & & & & & x_3 = x_2 +
& & & & & & & & y_1 = y_2;
& & & & & & & & y_2 = y_3;
& & & & & & & & y_3 = f( x_3 );
& & & & & & & & step = 2 *
& & & & if( x_1 > x_3 )& & & & & & & & & & & & & & & & & & & & //将区间按照从小到大的顺序调整,只需调整两端点
& & & & {& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //这样调整是为了符合“左小右大”的习惯
& & & & & & & & tmp = x_1;
& & & & & & & & x_1 = x_3;
& & & & & & & & x_3 =
& & & & & & & & tmp = y_1;
& & & & & & & & y_1 = y_3;
& & & & & & & & y_3 =
& & & & printf( "x_1 = %f, x_2 = %f, x_3 = %f\n", x_1, x_2, x_3 );
& & & & printf( "y_1 = %f, y_2 = %f, y_3 = %f\n", y_1, y_2, y_3 );
& & & & return( 0 );& & & & & & & & & & & & & & & & & & & & //返回0,表示程序结束
/********************************************************
*& & & & 函数名称 :& & & & 目标函数& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
*& &输入变量 :& & & & 横坐标x& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & *
*& & & & 输出变量 :& & & & 纵坐标y& &&&& & & & & & & & & & & & & & & & & & & & & & & & & & & & *
*& & & & 说& & 明 :& & & & 目标函数要求具有单谷性& & & & & & & & & & & & & & & & & & & & *
********************************************************/
double f( double x )
& & & & y = x * x - 2 *x + 1;
& & & & return( y );
} #include
int a,b,x0,x1,x2,h,f0,f1,f2;
printf("please input the number\n";
scanf("x0=%d,h=%d",&x0,&h);
& &&&h=2*h;
& &&&x2=x0+h; /*这句逻辑上有问题,应该是x2 = x1 + h,否则x2等于x1,下面的循环从一开始就不会执行*/
& &&&f2=f(x2);
& &&&for(f1,f2;f2<f1;f0,f1,f2) 看到自己以前写的程序,风格实在是太烂了,最近在重新学习C语言,找到了一种更好的风格,刚刚重写了一次,比之前的紧凑很多,分享一下。
& & & & 修改:使用新的代码风格,& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & */
double f(double);
int main(void)
& & & & int& & & & & & & && & & & & & & & & & & & & & & & /*& & & & 变量按照词典的顺序安排& & & & & & & & & & & & & & & & & & & & */
& & & & double& & & &
& & & & double& & & & x_1, x_2, x_3;& & & & & & & & /*& & & & 定义横坐标& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & */
& & & & double& & & & y_1, y_2, y_3;& & & & & & & & /*& & & & 定义相应的纵坐标,以减少调用函数的次数& & & & */
& & & & step = 1;& & & & & & & & & & & & & & & & & & & & /*& & & & 初始化搜索& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & */
& & & & x_1 = 0;& & & & & & & & & & & & & & & & & & & & /*& & & & step按幂次变化,初值对搜索次数影响不大& & & & */
& & & & y_1 = f(x_1);
& & & & x_2 = x_1 +
& & & & y_2 = f(x_2);
& & & & if (y_2 > y_1) {& & & & & & & & & & & & /*& & & & 改变搜索方向& & & & & & & & & & & & & & & & & & & & & & & & & & & & */
& & & & & & & & step = -
& & & & & & & & temp = x_1, x_1 = x_2, x_2 =
& & & & & & & & temp = y_1, y_1 = y_2, y_2 =
& & & & x_3 = x_2 +
& & & & y_3 = f(x_3);
& & & & while (y_3 < y_2) {
& & & & & & & & step *= 2;
& & & & & & & & x_1 = x_2, x_2 = x_3, x_3 = x_2 +
& & & & & & & & y_1 = y_2, y_2 = y_3, y_3 = f(x_3);
& & & & if (x_1 > x_3) {
& & & & & & & & temp = x_1, x_1 = x_3, x_3 =
& & & & & & & & temp = y_1, y_1 = y_3, y_3 =
& & & & printf("x_1 = %f, x_2 = %f, x_3 = %f\n", x_1, x_2, x_3);
& & & & printf("y_1 = %f, y_2 = %f, y_3 = %f\n", y_1, y_2, y_3);
& & & & return 0;
& & & & 函数名称:目标函数f
& & & & 输入变量:横坐标x
& & & & 输出变量:纵坐标y
& & & & 说& & 明 :目标函数要求具有单谷性
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & */
double f(double x)
& & & & y = x*x - 2*x + 1;
} 楼主,你的程序有几个小问题,给你稍微改了下,仅供参考,测试几个例子,已通过。
int f(int n)
& & & & return 2 + n *
int main()
& & & & int a, b, x0, x1, x2, h, f0, f1, f2;
& & & & printf("please input the number: x0 = ");
& & & & scanf("%d", &x0);
& & & & printf("please input the number: h = ");
& & & & scanf("%d", &h);
& & & & x1 = x0 +
& & & & f1 = f(x1);
& & & & f0 = f(x0);
& & & & if(f1 < f0){
& & & & & & & & x2 = x1+h;
& & & & & & & & f2 = f(x2);
& & & & & & & & while(f2 < f1){
& & & & & & & & & & & & x0 = x1;
& & & & & & & & & & & & x1 = x2;
& & & & & & & & & & & & x2 = x1+h;
& & & & & & & & & & & & f0 = f(x0);
& & & & & & & & & & & & f1 = f(x1);
& & & & & & & & & & & & f2 = f(x2);
& & & & & & & & }
& & & & & & & & a = x1;
& & & & & & & & b = x2;
& & & & else{
& & & & & & & & x2 = x0 -
& & & & & & & & f2 = f(x2);
& & & & & & & & while(f2 < f0){
& & & & & & & & & & & & x1 = x0;
& & & & & & & & & & & & x0 = x2;
& & & & & & & & & & & & x2 = x0-h;
& & & & & & & & & & & & f0=f(x0);
& & & & & & & & & & & & f1=f(x1);
& & & & & & & & & & & & f2=f(x2);
& & & & & & & & }
& & & & & & & & a=x2;
& & & & & & & & b=x1;
& & & & printf("a = %d, b = %d\n", a, b);
& & & & return 0;
} : Originally posted by xqhuang8793 at
楼主,你的程序有几个小问题,给你稍微改了下,仅供参考,测试几个例子,已通过。
#include&stdio.h&
int f(int n)
& & & & return 2 + n *
int main()
& & & & int a, b, x0, x1, x2, h, f0, f1, f ... 非常感谢&&本来想送BB的 但是没找到送的地方 一朵花 聊表感谢哈 : Originally posted by renchong at
非常感谢&&本来想送BB的 但是没找到送的地方 一朵花 聊表感谢哈 没事,互帮互助嘛:hand:一个C语言问题... 等_百度知道
一个C语言问题... 等
题目描述编写函数,计算n!,n&=12。输入测试数据有多组,每组占一行,仅包括一个正整数n。输出对于每组测试数据,输出结果单独占一行,为n!。样例输入35样例输出6120
3!=6,你写错题目了吗?#include &stdio.h&void main(){
int n,i,sum=1;
scanf(&%d&,&n);
for(i=1;i&=n;i++)
sum=sum*i;
printf(&%d&,sum);
3!等于6啊~~而且你的结果没有120呢
你要输入多组数据是吗?还是只要两组
#include &stdio.h&void main(){
int n,m,i,sum=1,sn=1;
scanf(&%d%d&,&n,&m);
for(i=1;i&=n;i++)
sum=sum*i;
for(i=1;i&=m;i++)
printf(&%d&#92;n&,sum);
printf(&%d&,sn);}
哎,还是不对呀..多组呢
你不是说两组吗,这里输入两个数字就ok了。下面是多组的,第一个要输入的数是组数,后面是#include &stdio.h&void main(){
int n,m,a[100],sum,i,j=0;
scanf(&%d&,&n);
while(n&0)
scanf(&%d&,&m);
for(i=1;i&=m;i++)
for(i=0;i&j;i++)
printf(&%d&#92;n&,a[i]);}
来自团队:
其他类似问题
为您推荐:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言输入一个数组 的文章

 

随机推荐