0

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

我基本上想:

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

*检查它是否是一个数字

*如果不是,返回错误

*将该字符转换为浮点数

*将值复制到另一个变量(我在这里称之为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 必须是一个 const char 并且每当我尝试改变它时,它总是会失败。我很沮丧,被迫在这里问,因为我相信我已经尝试了很多并且我一直失败,但是在我让它工作之前我不会松一口气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);
 }
4

2 回答 2

1

您可能需要使用%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);
}
于 2010-05-12T18:32:21.947 回答
1

为什么不让 scanfatof为您进行转换?

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

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

此外,使用strtod而不是,atof您将知道转换是否成功(比您的使用方法isdigit在负整数上失败)。

于 2010-05-12T20:15:35.210 回答