㈠ c语言 如下源码,运行的时候 有些语句直接被跳过,原因何在求详解,
那是因为你读入单个字符的方式不对,
纯粹的scanf("%c"),或者getchar()都会把你上一次输入的回车符( )读入了。
然后你就读入了一个回车符。
正确的方式是读入到一个字符串,再取字符串首位。
代码:
//老师学生信息放在一起并打印出来
#include<stdio.h>
unioncondition
{
intscore[4];//学生4科成绩
charsituation[40];//教师工作情况
};
structpersonal
{
intnum;//编号
charname[10];//姓名
charsex;//性别
charkind;//筛选t或s
unionconditionchange;
};
structpersonalinformation[2];//创建两个个人信息表
voidmain()
{
inti,j;
for(i=0;i<2;i++)
{
printf("Pleaseinputnum:");//编号
scanf("%d",&information[i].num);
charsex[16];
printf("EntertheMortheW:");//性别
scanf("%s",sex);
information[i].sex=sex[0];
printf("Enterthename:");//名字
scanf("%s",information[i].name);
charts[16];
printf("pleasechangetors:");//t或s
scanf("%s",ts);
information[i].kind=ts[0];
if('t'==information[i].kind)//t为教师工作情况
{
printf("Pleaseenterthesituation:");
scanf("%s",information[i].change.situation);
}
else//s为学生成绩
{
for(j=0;j<4;j++)
{
printf("pleaseenterno.%dscore:",j);
scanf("%d",&information[i].change.score[j]);
}
}
}
for(i=0;i<2;i++)//打印以下
{
printf("%d ",information[i].num);//编号
printf("%s ",information[i].name);//姓名
printf("%c ",information[i].sex);//性别
if('t'==information[i].kind)
{
printf("%s",information[i].change.situation);//工作情况
}
else
{
for(j=0;j<4;j++)
{
printf("%d",information[i].change.score[j]);//成绩
}
}
}
}
运行:
㈡ C语言语法没错误但是运行起来会跳过某一行
你没给代码,猜一下问题原因:
因为你输入编码后回车,比如你输入1后回车,回车符留在了缓冲区,当你的代码接收姓名时,直接得到了回车符,所以改善方法是,在你的接收姓名的代码前加一行:getchar();
代码类似于:
......
printf("请输入编码");
scanf("%d",&code);
getchar(); /*这行是要新加的*/
printf("请输入姓名:");
scanf("%s",name); /*name是字符数组*/
......
㈢ C语言求助 总是跳过scanf语句,为什么
这个是本身编译软件的问题,也不算是属于BUG。那是由于上一个输入输入的函数最后判断输入完毕的回车会在这里生效,而且你写getchar函数也会一同运行,解决办法就是写两个getchar。
㈣ 我的C语言程序直接跳过了一个输入的步骤是怎么回事。刚开始学c
因为scanf在输入数只时,碰到非数值时就停下来了,回车、空格等等都是非数值。
代码中要求输入两个数值,此时在第二个数值的后面,一定会有其他非数值字符,如回车符,而接下来输入字符时就将那个回车符作为了输入的字符了
㈤ 为什么我的C语言程序会跳过一条输入语句呢
老兄,是这样的,你的语句中有输入字符型数据或着字符串的,如果连续输入两个比如:
scanf("%c",&a);
scanf("%c",&b);
运行的时候你如果输入了 r回车,s回车,也就是输入字符S后按了回车,然后输入字符S 输入回车,此时变量 b并不能够接受你输入的S,而是接受了回车符号,所以造成好象有个输入语句没有执行一样.
所以你把你的程序中,连续的接受字符或字符串的语句后面都加上个 getchar(),用来接受你的那个回车就没有问题了,源程序我不在帮你该了,你自己加上吧.
㈥ 为什么总是跳过这一步(C语言编程)
在
while(getchar()!='y')
语句前加入一个getchar();
因为在之前,你会输入一个回车键,getchar()得到的是回车键,因此跳过这步
㈦ c语言意外跳过判断语句
完整代码如下,编译通过,附上结果,若有疑问,请追问。若满意,望采纳.
#include<stdio.h>
#include<stdlib.h>
intmain()
{
voidswap(float*,float*);
floatfirstnum,secnum;
charsortOrder;
printf("Entertwonumbers:");
scanf("%f%f",&firstnum,&secnum);
printf(" Beforethecalltoswap(): ");
printf("Thevalueinfirstnumis%5.2f ",firstnum);
printf("Thevalueinsecnumis%5.2f ",secnum);
if(firstnum>secnum)
swap(&firstnum,&secnum);
getchar();
while(1)
{
printf(" Pleaseinputthesortorder(e(exit),a(ascending),d(descending)):");
scanf("%c",&sortOrder);
getchar();
if(sortOrder=='d')
{
printf(" Afterthecalltoswap(): ");
printf("Thevalueinfirstnumis%5.2f ",firstnum);
printf("Thevalueinsecnumis%5.2f ",secnum);
}
elseif(sortOrder=='a')
{
printf(" Afterthecalltoswap(): ");
printf("Thevalueinsecnumis%5.2f ",secnum);
printf("Thevalueinfirstnumis%5.2f ",firstnum);
}
elseif(sortOrder=='e')
return0;
else
printf("Error!");
}
system("pause");
return0;
}
voidswap(float*num1Addr,float*num2Addr)
{
floattemp;
temp=*num1Addr;
*num1Addr=*num2Addr;
*num2Addr=temp;
}
㈧ c语言的问题。。。跳过了语句
这是因为你前面有scanf("%d",&entry);
这句输入,你输入完后会敲一下回车键,表示你输入的结束,这个回车键会留在输入缓冲区内,当你使用a=getchar();是,他发现缓冲区内有字符,也就是那个回车键,他会在动将回车键赋给a,所以才出现跳过的现象。
你可以做如下修改:
scanf("%d",&entry);
后面接一句:getchar();用来吃掉回车键,这样就可以了。
㈨ C语言为什么跳过了while语句
因为我们在输入第一组的2个数时会输入“回车”,这个回车会被你第二个“scanf”函数捕获,你只要在第二个“scanf”语句前加一句“getchar();”就行了,代码如下:
#include
"stdio.h"
int
main(){
int
a,b;
char
operator;
printf("please
input
two
number:");
scanf("%d
%d",&a,&b);
printf("please
input
operater(+
or
-):");
getchar();
scanf("%c",&operator);
switch(operator)
{
case
'+':
printf("%d+%d=%d\n",a,b,a+b);break;
case
'-':
printf("%d-%d=%d\n",a,b,a-b);break;
default
:
printf("input
error\n");
}
return
0;
}
㈩ 请问为什么这一行命令被跳过了简单的C语言
我推测是因为 %c 把你输入的回车符给抓到了
你可以把ch的值的数值形式打印出来,八成是32或者10