C语言中用scanf语句输入时,如何做到输入字母时,程序报错。输入数字时,继续向下运行。

来源:百度知道 编辑:UC知道 时间:2024/05/27 18:34:17
一共有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);
}
//谢谢

#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");
}

饿……只解决你的scanf报错问题。

scanf有返回值,int类型,返回你成功输入的个数。

例如:
int a,b;
scanf("%d",&a);//输入数字返回1,否则不返回1
scanf("%d%d",&a,&b);//全输入数字返回2,输入一个返回1,否则不返回1和2,输入错误返回啥,有具体实现确定。

可用再定义一个字符行变量或一个字符串来实现(字符型变量只能在输入一个字母时报错(而且