
“这是不是判断输入的是否为数值,如果是就继续循环输入,一直到输入非数值!”:是的。
“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
/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)