C语言中可以限制输入类型吗??例如只可以输入数字,输入其他会报错!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中可以限制输入类型吗??例如只可以输入数字,输入其他会报错!!相关的知识,希望对你有一定的参考价值。
如可以的话,请教教小弟好吗??
#include<stdio.h>
typedef struct
int data[71];
int n;
Stack;
void Pop(Stack*s,int num)
s->n++;
s->data[s->n]=num;
void Push(Stack*s,int*num)
*num=s->data[s->n];
s->n--;
int IsEmptyStack(Stack s)
if(s.n==0)return 1;
else return 0;
void DisChangeTo(int num,int f)
int w=0;
Stack s=0,0;
while(num>0)
Pop(&s,num%f);
num/=f;
printf("\n%d jinzhi is:",f);
while(!IsEmptyStack(s))
Push(&s,&w);
if(w>=0&&w<=9) printf("%d",w);
else printf("%c",w+55);
printf("\n");
int main()
int f,v,num;
while (1)
printf ("Please chose the action 0 for exit 1 for start:");
scanf ("%d",&v);
if (v==1)
printf ("Please input the jinzhi:");
scanf ("%d",&f);
if(f==8||f==16||f==2)
printf("Please input the number:");
scanf ("%d",&num);
DisChangeTo(num,f);
else
printf("The jinzhi is wrong\n");
v=0;
else if (v==0)
system("pause");
exit(1);
else
printf ("This action is wrong!\n");
v=0;
假设你只想要数字,申请变量的时候就申请int型的,用户输入字母的话程序就报错了...估计还会崩溃~
还一种方法就是接受输入后判断一下.
char c;//这地方就不能用int了,就如上边说的-接受到字母会崩溃.
while((c=getchar())!='\n') //接受输入,并且判断是否非空.
if(c>='0'&&c<='9')
//如果是数字怎么样...
else
//如果是非数字怎么样...
注意上面用while是循环输入,如果只输入一个字符while去掉.
如果不想用while就用char[100]类这的数组.
希望能给你些帮助. 参考技术A 判断是否为数值,是就通过,不是则报错。
用个if判断就OK了,应该有个函数能比较是否为数值的。
另外就从ASCII来判断,大于小于,就能把限定在数字范围内了。 参考技术B 没有这个函数。不过可以自已编写。比如输入数字,你就把数字当作字符串进行录入,再作检查,如果其中有非数字字符刚报错。然后再写一个函数把字符串转为int型或者double。给你要用到的函数吧
template <class TYPE>
void CharToNum(char *string,TYPE *num)
//通过使用模版,把char型转换成任意型。
//这样通过读入字符串,再转换成int,long;
unsigned int m=strlen(string);
*num=0;
for(unsigned int i=0;i<m;i++)
*num=*num*10+(*(string++)-'0');
int InputIntOnly(char *string) //用户只能向屏幕输入数字
while(*string!='\0')
if((*string>='0'&&*string<='9'))
string++;
else
return 0;
return 1;
在 C 中存储前导零
【中文标题】在 C 中存储前导零【英文标题】:Store leading zeroes in C 【发布时间】:2019-02-23 22:24:36 【问题描述】:对于初学者来说,我是编程新手
我想知道如何使用 scanf 存储带有前导零的数字,而不是修改 printf。它与数据类型有关吗?如果是这样,它是什么?我该如何使用它?我目前只知道 int、double 和 float
例如,我想输入数字“02”并接收“02”作为输出,当我输入“2”时,输出也将是“2”。
【问题讨论】:
没有这样的数字“02”。您可以按原样存储字符串,也可以单独存储字符串中前导零的数量(如果有)。 数字类型没有前导零的概念。他们甚至没有十进制数系统的概念。这一切都只是二进制。 危险。将 010 解释为 8 可以原谅智能输入例程,因为前导 0 用于指定 八进制 常量。 @LeonardoAlvesMachado 从技术上讲,char c[5]
将是一个 4 字母字符串,因为第五个字符将是终止 NUL 字节,通常不被视为“字母”(例如,根据strlen
)。此外,C 中的字符串特别是一个由 NUL 字节终止的char
数组,而char c[5]
也可能只包含五个不是字符串或用作一个字符串的char
。
@LeonardoAlvesMachado: char c[5];
定义了一个能够容纳 5 个元素(char
类型)的数组。 “字符串”需要一个终止 '\0'
字节,它必须在底层数组中。所以,c
可以容纳最多 4 个字母长度的字符串。
【参考方案1】:
使用scanf
说明符d
、i
、o
、u
、x
、a
、e
、@9876543@30@、@9876543 的结果是一个数学数字13 .没有前导零。从概念上讲,数字中没有数字。它是一个纯粹的数学实体。 (正如Jonathan Leffler 所指出的,输入中的前导零与i
说明符有关;前导零在解释数字时将基数更改为八进制。这仅用于输入;结果仍然是一个没有相关数字或基数的数字.)
要保留数字的前导零,您必须将其视为字符串。 scanf
可用于读取带有 s
、c
和 [
说明符的字符串或单个字符,尽管您可能希望使用简单的获取字符函数,例如 getchar
。您必须自己计算前导零。剩余的数字也可以作为字符串处理,或者您可以将它们转换为数字。
【讨论】:
对于%i
,前导零很重要——017 和 17 是不同的值(八进制 017 是十进制的 15;17 仍然是十进制的 17)。这会捕获人们使用%i
编写日期解析代码来扫描日期或月份(使用%i
,输入09
给出零值,并将9 留给下一个转换说明符解释)。
【参考方案2】:
如何存储带有前导零的数字 (?) 我目前只知道 int、double 和 float
要存储一个整数和,前导零计数是 2 条信息。读取用户输入时,记录数字和其长度或文本宽度。
" "
消耗空格。"%n"
记录到目前为止扫描的字符的偏移量。这不影响scanf()
的返回值。
int num;
int n1, n2;
if (scanf(" %n%d%n", &n1, &num, &n2) != 1)
puts("Failed to read an int");
否则,打印它。"0"
:用零填充。"*"
:从参数列表导出的最小打印宽度。
else
int length = n2 - n1;
printf("%0*d\n", length, num);
输入/输出
007
007
【讨论】:
【参考方案3】:如果您将数字存储为整数(例如,int
)或浮点类型,任何格式信息都不可避免地丢失:仅存储数字的二进制表示。 (将其视为保存数字的 idea 可能会有所帮助,例如“二”,而不是写入时的外观。)
您需要在别处存储任何附加信息,例如通过保存原始字符串并将其用于输出,或者通过保存位数并将其应用于printf
格式。还有一些十进制数库可以在内部保存数字的十进制表示,但这比使用本机类型要重得多。
(或者,只需选择规范的输出格式并使用它而不管输入。目标真的是保持任何输入格式原样,还是总是添加前导零就足够了输出?)
【讨论】:
【参考方案4】:如前所述,数字没有前导零。
但是你可以把它当作一个字符串来处理
printf("Enter num: ");
char buf[50];
scanf("%s", &buf);
printf("You entered: %s", buf);
【讨论】:
【参考方案5】:如果您有一个 int
值,则在内部它始终表示为一定数量的位(或您的 CPU 使用的任何 to store numbers),因此您无法控制它。
就内部格式而言,总是有“前导零”,例如,因为 2099 实际上是 32 位格式的 0b00000000000000000000100000110011
。由于endian issues,这变得更加复杂,但原理仍然成立。
前导零唯一有意义的情况是,如果您使用的是已经过时的binary coded decimal,或者是由sprintf
类型函数生成的字符串表示法。
只有人类才关心数字。就计算机而言,添加 1+1 和 6916863870493370158+6471945999301299985 一样困难,因为它们都是 64 位操作。
【讨论】:
以上是关于C语言中可以限制输入类型吗??例如只可以输入数字,输入其他会报错!!的主要内容,如果未能解决你的问题,请参考以下文章