Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C仅输入小数_C_String_Input_Numerics - Fatal编程技术网

C仅输入小数

C仅输入小数,c,string,input,numerics,C,String,Input,Numerics,在一个简单的C应用程序中,我试图将输入限制为仅数字,但是我得到了一个警告。我怀疑这与以下部分有关。第一版是正确的做事方式吗?谢谢 for(i=0;i< strlen(string); i++) { if( string[i]<"0" || string[i]>"9") valid= FALSE; } 为了澄清,我必须按照我正在做的练习给出的方式进行检查。谢谢 第一版完全错误。它进行指针比较,因为字符串文字会衰减为指针,而字符会提升为int 第二

在一个简单的C应用程序中,我试图将输入限制为仅数字,但是我得到了一个警告。我怀疑这与以下部分有关。第一版是正确的做事方式吗?谢谢

    for(i=0;i< strlen(string); i++)
{
    if( string[i]<"0" || string[i]>"9")
        valid= FALSE;
}

为了澄清,我必须按照我正在做的练习给出的方式进行检查。谢谢

第一版完全错误。它进行指针比较,因为字符串文字会衰减为指针,而字符会提升为
int

第二版很接近了,不过您应该真正使用
中的
isdigit


顺便说一句,你知道循环终止条件中的
i
会将线性时间算法转换为二次时间算法吗?

你不能只使用
如果(scanf(“%d”)、&n)==1
或调用
strtol

第二个是(更多)正确的。所以。。。你不想检查小数点吗?谢谢你给我的练习,我们必须使用这种方法。但我似乎找不到我的朋友error@MarioPen:那么,使用第二个选项(或
isdigit
)能解决问题吗?
strtol
会起作用,但
sscanf
不会等效。例如,他的代码说
1a
无效,但是
sscanf
仍然会将1转换为一个数字,因此它会返回1。我故意写了
scanf
,假设他是从
stdin
读取的
    for(i=0;i< strlen(string); i++)
{
    if( string[i]<'0' || string[i]>'9')
        valid= FALSE;
}
    void main()

{
    char number[4];
    printf("Please enter a decimal number: ");
    gets(number);   
    if (numeric(number))
        printf("'%s' is a valid number\n", number);
    else
        printf("'%s' is an invalid number\n", number);
}