代码之家  ›  专栏  ›  技术社区  ›  NLed

扫描、检查、转换、复制值…如何?-C

  •  0
  • NLed  · 技术社区  · 14 年前

    已经有一段时间了,我仍在努力让某个代码工作。我以前问过一些关于不同命令等的问题,但现在我希望这是最后一个问题(将所有问题合并到一个代码中)。

    我基本上想:

    *扫描输入(应该是字符?)

    *检查它是否是一个数字

    *如果没有,返回错误

    *将该字符转换为浮点数

    *将值复制到另一个变量(我在这里称它为imp)

    我想到的是:

    编辑代码*

    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    main(){  
      int digits;
      float imp=0;
      char* alpha;
      do{
    
        printf("Enter input\n\n");
        scanf("\n%c",alpha);
        digits=isdigit(alpha);
          if(digits==0){
             printf("error\n\n");
          }
         imp=atof(alpha);
      }while(digits==0);
    
    }
    

    问题是这个代码根本不起作用…它给了我ATOF必须是一个常量字符,每当我尝试改变它时,它总是失败。我很沮丧,不得不问这里,因为我相信我已经尝试了很多,我一直失败,但我不会松一口气,直到我得到它的工作XD,所以我真的需要你们的帮助。

    请告诉我为什么这个代码不起作用,我做错了什么?我还在学习C,非常感谢您的帮助:)

    编辑 ATM错误为:

    Argument no 1 of 'isdigit' must be of type 'const int', not '<ptr>char'

    编辑 这段代码编译得很好,但在输入时会崩溃。

      #include<stdio.h>
      #include<stdlib.h>
      #include<ctype.h>
      main(){  
      int digits;
      float imp=0;
      char* alpha=0;
      do{
    
       printf("Enter input\n\n");
       scanf("\n%s",alpha);
       digits=(isdigit(alpha[0]));
       imp=atof(alpha);
      }while(digits==0);
     }
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   tomlogic    14 年前

    为什么不让扫描做 atof 为你转换?

     #include <stdio.h>
     int main()
     {  
        float imp=0;
        while (1)
        {
           printf("Enter input\n\n");
           if (scanf("%f", &imp) < 1) break;
        }
        return 0;
    }
    

    你最近的例子失败了,因为 alpha 是空指针。声明为 char alpha[40]; 为它分配空间。您可能希望在格式字符串中使用%40以防止 scanf 从溢出 阿尔法 .

    此外,使用 strtod 而不是 阿托夫 你会知道转换是否成功(比你使用的方法更好) isdigit 在负整数上失败)。

        2
  •  1
  •   brickner    14 年前

    你可能需要使用 %s 而不是 %c 把它放进去 char 数组(数组) char* )您可能还会得到一个需要使用的错误 const char* 而不是 const char .

    您不想只读取一个字符-您想读取整个字符串…

    编辑 :

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    main(){  
      int digits,i;
      float imp=0;
      char* alpha = malloc(100); /* 100 is for example */
      do{
        printf("Enter input\n\n");
        scanf("\n%s",&alpha);
        for (i = 0; i != 100; ++i)
        {
          if (alpha[i] == '\0')
            break;
          if (!isdigit(alpha[i]))
          {
            printf("error\n\n");
            return ...;
          }
        }
         imp=atof(alpha);
      }while(true);
    }
    
    推荐文章