c语言中判别scanf函数输入格式

凛冬star 2017-08-14 06:54:21
while (scanf("%d", &ch) != 1)
{
scanf("%*s"); //跳过非法输入
printf(" is not an integer,Enter it with 1,2,3,4\n");
}

上面的代码中如果输入小数3.1,编译器会认为会把3赋给ch变量,剩下的.1则被留在缓冲区中。但是我想要实现程序不接受3.1小数输入,即输入小数,程序判断非法,需要重新输入一个十进制整数,可我不知道如何实现scanf函数来判别是否是小数或整数,之前在网上说用强制转换,即用if(ch==(int)ch)来判别,但用在这里不行,scanf会将整数部分赋给变量,所以实在没辙,请教各位大佬。
...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-15
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
    while (1) {
        printf("Input a integer:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
		if (strlen(s)>10) {
			printf("Input too long(>9)!\n");
			continue;
		}
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c) {
                printf("%d is a integer.\n",i);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a integer!\n",s);
    }
    return 0;
}
赵4老师 2017-08-15
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
自信男孩 2017-08-15
  • 打赏
  • 举报
回复
建议使用字符串吧,通过解析字符串来判定输入的是否为整数。
大米粥哥哥 2017-08-14
  • 打赏
  • 举报
回复
输入字符串 判断是否只有数字 然后转成int

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧