求解一道C语言基础题?

我想让用户输入整数,怎样防止用户不小心输入字符导致的程序错误?例如下面的代码,我输入字符“a”就会出现死循环,怎样解决?#include<stdio.h>intmain(... 我想让用户输入整数,怎样防止用户不小心输入字符导致的程序错误?例如下面的代码,我输入字符“a”就会出现死循环,怎样解决?
#include <stdio.h>

int main() {
int a = 0; // 素数的个数
int num = -1; // 输入的整数
while (num > 32767 || num <= 0)
{
printf("请输入大于0且小于等于32767的整数n:");
scanf("%d", &num);
if (num > 0 && num <= 32767) break;
}

for (int i = 2; i < num; i++) {
if (num % i == 0) {
a++; // 素数个数加1
}
}
if (a == 0) {
printf("%d是素数。\n", num);
}
else {
printf("%d不是素数。\n", num);
}
return 0;
}
展开
 我来答
一个疯子4444
2020-12-02 · TA获得超过324个赞
知道小有建树答主
回答量:619
采纳率:62%
帮助的人:168万
展开全部
#include <stdio.h>
#include <string.h>

int exam(char *s){
int y=strlen(s),i,sum=0,n,m,k;
for(i=0;i<y;i++) {
if(y>5) return -1;
if(s[i]<'0'||s[i]>'9') return -1;
}
i=y-1;
m=0;
do{
n=s[i]-'0';

k=m;
while(k){n=n*10;k--;}
sum+=n;
i--;
m++;
}while(i>=0);
return sum;
}

int main() {
int a = 0; // 素数的个数
int num = -1; // 输入的整数
char s[30];
while (num<0)
{
printf("请输入大于0且小于等于32767的整数n:");
gets(s);
num=exam(s);
//if (num > 0 && num <= 32767) break;
}

for (int i = 2; i < num; i++) {
if (num % i == 0) {
a++; // 素数个数加1
}
}
if (a == 0) {
printf("%d是素数。\n", num);
}
else {
printf("%d不是素数。\n", num);
}
return 0;
}
随便输入吧!
程序小冰

2020-12-02 · 程序爱好者,与诸位共同进步
程序小冰
采纳数:340 获赞数:480

向TA提问 私信TA
展开全部
判断一下输入的值,如果是数字再执行下面的语句块。不是数字就输出《输入为错误字符》
更多追问追答
追问
那要怎么判断呀?
追答
int ret = scanf("%d",&digit);
if(0 == ret)
{
printf("输入异常字符\n");
}
else
{
printf("输入整数\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张婷婷J1
2020-12-02
知道答主
回答量:1
采纳率:0%
帮助的人:550
展开全部
好好照顾自己女朋友
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pengjianbo311
2020-12-02 · TA获得超过464个赞
知道小有建树答主
回答量:1666
采纳率:36%
帮助的人:92.8万
展开全部
这个时候你不能使用scanf直接把用户的输入给到num,你可以改成先把输入放入字符串数组,再判断数字,简单实现如下
char a[100];
gets(a);

int isInputAllNum = 0;
int num = 0;

for(int i=0;i<100;i++)
{
if(a[i]=='\0')
{ break; }
if(a[i]<'0' || a[i]>'9')
{ isInputAllNum+=1;
break; }

num = num * 10 + a[i] - '0';
}

if(isInputAllNum>0)
{ printf("请输入数字\n"); }
else { printf("%d",num); }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式