当前位置:首页 » 编程语言 » c语言scanf循环

c语言scanf循环

发布时间: 2023-02-22 15:49:35

A. c语言scanf语句导致无法进入循环

问题已经解决,还是比较简单的。。。一个小问题而已。是scanf函数的问题。

我先贴图好吧,我运行的结果。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define SIZE 50

#define RAT 5

struct movie{

char name[SIZE];

int rating;

};

void * s_gets(char *,int n);

int main()

{

int i=0,j,k;

struct movie *mov;

printf("输入你想录入的影片数量 ");

scanf("%d",&k);

mov=(struct movie *) malloc(k*sizeof(struct movie));

printf("输入你想录入的第一部影片名称 ");

while(i<k&&s_gets(mov[i].name,SIZE)!=NULL&&mov[i].name[0]!='')

{


printf("输入影片序号:");

scanf("%d",&mov[i++].rating);

while(getchar()!=' ')

continue;

puts("输入下一部影片名称:(empty line to stop):");

}//printf("%s ",mov[0].name);

if(i==0)

printf("No data entered ");

else

printf("Here is the movie list: ");


for(j=0;j<i;j++)

{

printf("Movie: %s Rating: %d ",mov[j].name,mov[j].rating);


}printf("Bye ");

return 0;

}


void * s_gets(char *ch,int n)

{

char *ret_val;

char *find;

fflush(stdin); //getchar();可选,最好用fflush函数;

ret_val=fgets(ch,n,stdin);

if(ret_val)

{

find=strchr(ch,' ');

if(find)

*find='';

else

while(getchar()!=' ')

continue;

}

return ret_val;

}

然后贴我的源码,就多了一行代码而已,在你的s_get函数里的fgets函数前面加了个fflush函数,位置,我已经加粗标明出来了。。。问题也很简单,就是在第一个scanf函数的时候,你是按了回车的,所以第二次使用scanf的时候,fgets直接吃掉了回车,这是我们不需要的,所以在这个之前,我们必须先把stdin输入流里的回车,清理掉,使用fflush函数一次清理了stdin输入流,等stdin输入流干净了之后,再调用fgets就不会出错了,当然也可以使用getchar函数把回车吃掉,不过比较麻烦,我一般喜欢用fflush函数,反正输入前,那些脏东西,我们不关心,也不需要,而且万一有多个呢,getchar只能清理一个脏东西,而fflush函数,直接全部冲掉,来的简单方便。。。。

问题解决,请采纳!不懂再问。

B. C语言循环里有scanf时怎么跳出循环

可以约定输入-99999就退出:

#include<stdlib.h>
int main(void)
{
double *p=NULL;
double ble[2]={0};
while(true)
{
scanf("%lf",&ble[0]);
double *p=(double*)malloc(sizeof(double));
if(!p) return NULL;
*p=ble[0];
if(ble[0]==-99999) break;
}
return 0;
}
或者,约定在数字后面紧跟着输入@就退出循环:
#include<stdlib.h>
int main(void)
{char c;
double *p=NULL;
double ble[2]={0};
while(true)
{
scanf("%lf%c",&ble[0],&c);
double *p=(double*)malloc(sizeof(double));
if(!p) return NULL;
*p=ble[0];
if(c=='@') break;
}
return 0;
}

C. c语言 循环输入 scanf 急!!!急!!!急!!!

do { printf("\n是Y/否N进行新的计算: (Y/N) ? ");
// getchar();
scanf("%c",&W);
printf("\n%c,%d",W,W);

fflush(stdin);
if(((W=='Y')||(W=='y'))!=1) break;
} while(1);
这样既可

知道为什么么?假设你只是输入一个 Y 然后回车,scanf函数也只是读取了Y这个字符而已,你的回车符没有被读走,于是下一次循环的时候,scanf读取到的就是一个回车符,因为退出了循环,就那么简单

D. C语言中 scanf()与循环问题

#include"stdio.h"
main()
{
int
a;
printf("%d",scanf("%d",&a));
//
这个很明显的告诉我们
scanf()返回的并非我们输入的数值,而返回的是输入了几个数字,这里只输入了一个数
所以返回值为1
如果改为
scanf("%d",&a);
printf("%d",a);
则是把我们输入的值a存储在内存中,通过printf()语句显示出来
//
}

E. c语言scanf循环输入问题

用scanf函数输入数值时,可以指定列宽如scanf("%3f",&a);表示截取3个数字字符赋给a,如输入2345,它只将234赋给a,输出结果为234.000000。不可以指定输入精度,如scanf("%3.2f",&a)格式不合法的。详情请查阅:C语言程序设计(第2版) 谭浩强 着,第85页。

F. C语言中 scanf()与循环问题

使用while的时候尽量不要使用组合条件,而应该采用这种形式:

while(1){
if(条件1)break;
//...
if(条件2)continue;
//...
if(条件3)return;
//...
}


所以可以将你的改为:

while(1)
{
scanf("%c",&u);
if(u=='p')
{
break;
}
else
{
case......//补充
}

}

G. C语言Scanf()死循环问题。

把scanf()换成下面例子中的函数试试:

#include<stdio.h>
#include<stdlib.h>
#defineHEAD_N10//Input_uint(FILE*fp)函数中限制输入的最大整数位数
intInput_uint1();//无符号整形输入函数
intInput_uint2(intdigit);//无符号整形输入函数截取前digit位
intmain()
{
inta,b;
printf("请输入赋值给变量a的整数:");
a=Input_uint1();
printf("请输入赋值给变量b的整数(截取前3位):");
b=Input_uint2(3);
printf("a=%d;b=%d ",a,b);
return0;
}
intInput_uint1()
{
intcount_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a计数变量;ratio转换系数,1,10,100等;
//count_c计数变量;number函数返回值;
//judge输入判断变量,-1出错;
charstr[HEAD_N];

for(count_a=0;count_a<HEAD_N;count_a++)
str[count_a]='0';
do
{
if(judge==1);
else
{
printf(" 输入错误。请输入一个大于等于零的整数:");
}
judge=1;

for(count_a=HEAD_N-1,count_c=HEAD_N-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0'&&str[count_a]<='9')||(str[count_a]==10)))
judge=-1;
if(str[count_a]==10||count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10&&count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&&count_a<='9')||(count_a==10)))
judge=-1;
if(count_a==10)
break;
}
}
count_a=0;
}
}
if(judge>0)
{
for(count_a=count_c+1;count_a<HEAD_N;count_a++)
{
if(str[count_a]>='0'&&str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
returnnumber;
}
intInput_uint2(intdigit)
{
intcount_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a计数变量;ratio转换系数,1,10,100等;
//count_c计数变量;number函数返回值;
//judge输入判断变量,-1出错;
charstr[HEAD_N];
if(digit>HEAD_N)
digit=HEAD_N;

for(count_a=0;count_a<digit;count_a++)
str[count_a]='0';
do
{
if(judge==1);
else
{
printf(" 输入错误。请输入一个大于等于零的整数:");
}
judge=1;

for(count_a=digit-1,count_c=digit-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0'&&str[count_a]<='9')||(str[count_a]==10)))
judge=-1;
if(str[count_a]==10||count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10&&count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&&count_a<='9')||(count_a==10)))
judge=-1;
if(count_a==10)
break;
}
}
count_a=0;
}
}
if(judge>0)
{
for(count_a=count_c+1;count_a<digit;count_a++)
{
if(str[count_a]>='0'&&str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
returnnumber;
}

H. C语言里面的scanf函数在循环里面的用法

不需要,如果你用逗号隔开的话,输入数据时就要输入逗号。
比如scanf("%d%d",
&a,
&b);输入时直接输入a的值,回车,然后输入b的值,回车。
如果是scanf("%d,%d",
&a,
&b);输入的时候就要输入a的值,然后输入个逗号,再输入b的值回车。

热点内容
标识标牌制图需要什么配置电脑 发布:2024-11-08 03:30:20 浏览:377
android仿网易 发布:2024-11-08 03:21:39 浏览:955
编译需要指令集吗 发布:2024-11-08 03:15:14 浏览:231
蓝鸥php培训 发布:2024-11-08 02:56:29 浏览:653
电脑配置xp是什么意思 发布:2024-11-08 02:56:27 浏览:340
软件自带服务器地址怎么办 发布:2024-11-08 02:55:45 浏览:578
幸福密码电视剧讲述了什么 发布:2024-11-08 02:55:40 浏览:426
win7文件夹看不到文件 发布:2024-11-08 02:55:37 浏览:667
苹果安卓战力哪个高 发布:2024-11-08 02:45:04 浏览:533
安卓备份哪个系统好 发布:2024-11-08 02:35:50 浏览:737