値のスキャン、チェック、変換、コピー…どうやって行うのですか?— C --

StackOverflow https://stackoverflow.com/questions/2821657

  •  26-09-2019
  •  | 
  •  

質問

かなり時間が経ちましたが、まだ特定のコードを機能させようとしています。さまざまなコマンドなどについて質問しました。以前はありましたが、今はこれが最後の質問になることを願っています (すべての質問を 1 つのコードに結合する)。

私は基本的に次のことをしたいです:

*入力をスキャンします(文字である必要がありますか?)

*番号かどうかを確認してください

*そうでない場合はエラーを返します

*その文字を浮動小数点数に変換します

*値を別の変数にコピーします(ここでは 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);
 }
役に立ちましたか?

解決

scanf に実行させてみてはいかがでしょうか 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 は NULL ポインタです。それを次のように宣言します char alpha[40]; スペースを割り当てます。おそらく、フォーマット文字列で %40s を使用して、 scanf 溢れるから alpha.

また、使用 strtod の代わりに atof 変換が成功したかどうかがわかります(あなたの使用方法よりも優れています) isdigit 負の整数では失敗します)。

他のヒント

おそらく使用する必要があります %s の代わりに %c そしてそれを入れるために char 配列 (char*)。おそらく、使用する必要があるエラーが発生する可能性があります const char* そしてそうではありません const char.

1 文字だけを読みたいのではなく、文字列全体を読みたいのです...

編集:

#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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top