C语言中用scanf语句输入时,如何做到输入字母时,程序报错。输入数字时,继续向下运行。
一共有n个人圈子,顺序排号。从第一个人开始报数(从1到3),凡是报到3的人退出圈子,问最后留下的是原来几号的那个人?在程序中scanf语句如何实现输入字母后,报错。谢谢。...
一共有n个人圈子,顺序排号。从第一个人开始报数(从1到3),凡是报到3的人退出圈子,问最后留下的是原来几号的那个人?
在程序中scanf语句如何实现输入字母后,报错。谢谢。
#include <stdio.h>
#define N 100
void main()
{
int i,k,m,n,num[N],*p;
printf("请输入人数.\n");
scanf("%d",&n); //这里怎么改一下,输入字母后报错
p=num;
for (i=0;i<n;i++) *(p+i)=i+1;//从1到n为每个人编号
i=0; //i为每次循环时的计数变量
k=0; //k为123报数时代计数变量
m=0; //m为退出的人数
while(m<n-1) //退出的人数比n-1少时做循环
{
if(*(p+i)!=0) k++;
if (k==3) //退出的人都值变为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0; //报道尾后i恢复为0
}
while (*p==0) p++;
printf("%d",*p);
}
//谢谢 展开
在程序中scanf语句如何实现输入字母后,报错。谢谢。
#include <stdio.h>
#define N 100
void main()
{
int i,k,m,n,num[N],*p;
printf("请输入人数.\n");
scanf("%d",&n); //这里怎么改一下,输入字母后报错
p=num;
for (i=0;i<n;i++) *(p+i)=i+1;//从1到n为每个人编号
i=0; //i为每次循环时的计数变量
k=0; //k为123报数时代计数变量
m=0; //m为退出的人数
while(m<n-1) //退出的人数比n-1少时做循环
{
if(*(p+i)!=0) k++;
if (k==3) //退出的人都值变为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0; //报道尾后i恢复为0
}
while (*p==0) p++;
printf("%d",*p);
}
//谢谢 展开
4个回答
展开全部
可用再定义一个字符行变量或一个字符串来实现(字符型变量只能在输入一个字母时报错(而且输入的数字必须是一位数),而字符串可解决几乎任何类型的输入错误,但程序较麻烦);
下面是以字符串为例的程序段:
首先要在开始定义一个字符串,和一个输入错误的标志变量error;
char c[20];
int error;
…………
…………
do
{gets(c);
error=0; /*先将error清零*/
for(i=0;c[i]!='\0';i++)
if(c[i]<'0'||c[i]>'9') error=1;
/*如果输入的字符串中,有一位不是数字,则error=1*/
if(error) printf("Data error.\n");
/*如果error为1,显示数据错误*/
} while(error);/*如果error为1,重新输入*/
for(i=0,n=0;c[i]!='\0';i++) n=n*10+c[i]-'0';/*将字符串转化为数字*/
…………
…………
下面是以字符串为例的程序段:
首先要在开始定义一个字符串,和一个输入错误的标志变量error;
char c[20];
int error;
…………
…………
do
{gets(c);
error=0; /*先将error清零*/
for(i=0;c[i]!='\0';i++)
if(c[i]<'0'||c[i]>'9') error=1;
/*如果输入的字符串中,有一位不是数字,则error=1*/
if(error) printf("Data error.\n");
/*如果error为1,显示数据错误*/
} while(error);/*如果error为1,重新输入*/
for(i=0,n=0;c[i]!='\0';i++) n=n*10+c[i]-'0';/*将字符串转化为数字*/
…………
…………
展开全部
#include <stdio.h>
#define N 100
void main()
{
int i,k,m,n,num[N],*p;
printf("请输入人数.\n");
scanf("%d",&n);
if(n>0&&n<=32767)
{
p=num;
for (i=0;i<n;i++) *(p+i)=i+1;//从1到n为每个人编号
i=0; //i为每次循环时的计数变量
k=0; //k为123报数时代计数变量
m=0; //m为退出的人数
while(m<n-1) //退出的人数比n-1少时做循环
{
if(*(p+i)!=0) k++;
if (k==3) //退出的人都值变为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0; //报道尾后i恢复为0
}
while (*p==0) p++;
printf("%d\n",*p);
}
else printf("输入错误\n");
}
#define N 100
void main()
{
int i,k,m,n,num[N],*p;
printf("请输入人数.\n");
scanf("%d",&n);
if(n>0&&n<=32767)
{
p=num;
for (i=0;i<n;i++) *(p+i)=i+1;//从1到n为每个人编号
i=0; //i为每次循环时的计数变量
k=0; //k为123报数时代计数变量
m=0; //m为退出的人数
while(m<n-1) //退出的人数比n-1少时做循环
{
if(*(p+i)!=0) k++;
if (k==3) //退出的人都值变为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0; //报道尾后i恢复为0
}
while (*p==0) p++;
printf("%d\n",*p);
}
else printf("输入错误\n");
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
饿……只解决你的scanf报错问题。
scanf有返回值,int类型,返回你成功输入的个数。
例如:
int a,b;
scanf("%d",&a);//输入数字返回1,否则不返回1
scanf("%d%d",&a,&b);//全输入数字返回2,输入一个返回1,否则不返回1和2,输入错误返回啥,有具体实现确定。
scanf有返回值,int类型,返回你成功输入的个数。
例如:
int a,b;
scanf("%d",&a);//输入数字返回1,否则不返回1
scanf("%d%d",&a,&b);//全输入数字返回2,输入一个返回1,否则不返回1和2,输入错误返回啥,有具体实现确定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
记得,Math.h里面或者stdlib.h里面有个IsNumber(char)的函数,还有个IsDigist(char)函数,可以用来判断。要不然就自己写一个函数来判断,不难的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询