我有一个简单的问题;
以下是代码:
#include<stdio.h>
main(){
int input;
printf("Choose a numeric value");
scanf("%d",&input);
}
我希望用户只输入数字... 所以它必须是这样的:
#include<stdio.h>
main(){
int input;
printf("Choose a numeric value");
do{
scanf("%d",&input);
}while(input!= 'something');
}
我的问题是我不知道在'某事'中要替换什么...我怎样才能防止用户输入字母字符?
修改
我有一些有趣的事情:
#include<stdio.h>
main(){
int input;
printf("Choose a numeric value");
do{
scanf("%d",&input);
}while(input!= 'int');
}
只要我输入数字,添加'int'就会保持循环,我尝试了'char'但是没有用。确实有字母表的东西吗? :S 请回复!
感谢您的帮助!
答案 0 :(得分:4)
你无法阻止用户输入任何他想要的内容 - 你只能忽略他/她输入的任何你不喜欢的东西。
典型的模式是使用fgets
读取字符串,然后扫描字符串并检查所有输入是否为isdigit
的数字。如果是全部数字,则转换为整数;否则,扔掉它再次获得输入。
或者,使用strtol
进行转换。它设置一个指向它可以转换为数字的数据末尾的指针;在这种情况下,你(显然)希望它指向字符串的结尾。
如果您不介意某些不可移植的代码,您可以一次读取一个字符,并丢弃除数字之外的任何内容(例如,在Windows上使用getch
)。
答案 1 :(得分:4)
strtol
库函数会将数字的字符串表示形式转换为其等效的整数值,并且还会设置指向与有效数字不匹配的第一个字符的指针。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
...
int value;
char buffer[SOME_SIZE];
char *chk;
do
{
printf("Enter a number: ");
fflush(stdout);
if (fgets(buffer, sizeof buffer, stdin) != NULL)
{
value = (int) strtol(buffer, &chk, 10); /* assume decimal format */
}
} while (!isspace(*chk) && *chk != 0);
如果chk
指向除空格或字符串终结符(0)之外的其他内容,则该字符串不是有效的整数常量。对于浮点输入,请使用strtod
。
答案 2 :(得分:0)
您不应使用scanf
来读取数字 - 请参阅http://www.gidnetwork.com/b-63.html
改为使用fgets
。
但是,如果您必须使用scanf
,则可以执行此操作:
#include <stdio.h>
int main() {
char text[20];
fputs("enter some number: ", stdout);
fflush(stdout);
if ( fgets(text, sizeof text, stdin) ) {
int number;
if ( sscanf(text, "%d", &number) == 1 ) {
printf("number = %d\n", number);
}
}
return 0;
}
答案 3 :(得分:0)
就个人而言,我会将输入读入缓冲区并扫描该字符串以查找我的号码。
char buffer [100];
浮动值;
做(
scanf(“%s”,缓冲区);
} while(sscanf(buffer,“%f”,&amp; value)!= 1)
这将循环,直到用户在该行上输入的第一件事是数字。输入可以是任何东西,但只有当输入的第一个东西是数字时才会超过此块
示例输入:
43289(价值是43289)
43.33(价值是43.44)
392gifah(价值是392)
ajfgds432(继续循环)