C语言输入函数scanf判断输入是否为数值问题!

C语言输入函数scanf判断输入是否为数值问题!,第1张

“这是不是判断输入的是否为数值,如果是就继续循环输入,一直到输入非数值!”:是的。

“scanf 是怎么判断输入是否为数值的?”:通过判断输入值是否和占位符类型匹配判断,如果匹配,返回匹配个数,不匹配,则函数结束,后面的占位符也不再判断。当然你这里只有一个占位符“%lf”,就只有0,1两种返回方案。

“是scanf的返回值吗?”:返回值是输入值和占位符匹配决定的。

“那如果换成%s%c时输入字符他是不是也和输入数值时一样会判断是否为字符,如果输入的不是字符也和上面一样就停止了呢?”:原理上是这样,但是占位符为“%s”时,你可以输入任意字符,因为你键盘上输入的任意字符都可以被匹配为“%s”,一串数字也可以是字符串

1、挨着判断每个字符的ASCII值是否在0~9之间。

2、例程:

#include <stringh>   //strlen()需要的头文件

#include<stdioh>

//#include "stdafxh"

#define n 100

int main(int argc, char argv[])

{

printf("第八单元 函数 判断一串字符串是否全为数字");

char a[n];

int isnumber(char a[n]);

printf("请输入一串字符串:\n");

scanf("%s",a); //输入字符串,给定首地址就行,a表示字符数组首地址

isnumber( a);  //实参,数组实参给首地址

printf("Hello World!\n");

return 0;

}

int isnumber(char a[n]){

int len = strlen(a);

int j =0;

for(int i =0;i<len;i++)  //遍历整个字符串

{

if(a[i]<=57&&a[i]>=48)  //0~9的ASCII码是48~57

{j++;}  //找到数字了就数量++

}

//数字总数和字符串长度一样,则全是数字,总数为0,则都不是数字,在0~len之间则有部分是数字

if (j==len){   

printf("全为数字");

}

else if(j == 0){printf("全不为数字");}

else{

printf("不全为数字");

}

return 0;

}

输入字符串,遍历该字符串判断每个字符是否是数字字符,是就存入整数数组,并且数字个数加1,最后输出整数数组。

参考代码:

#include<stringh>

#include<stdioh>

int main()

{

int b[100],n=0,i;

char a[100];

gets(a);

for(i=0;a[i]!='\0';i++)

if(a[i]>='0'&&a[i]<='9')

b[n++]=a[i]-'0';

printf("共有数字%d个\n",n);

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

printf("%d ",b[i]);

return 0;

}

/

输出:

adsf4554ads5f4sd5a4f65sd45f

共有数字12个

4 5 5 4 5 4 5 4 6 5 4 5

/

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11671251.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存