1

ユーザーが 4 つの入力を 1 つずつ入力する必要がある割り当てがあります。それらは: character、float、float、int です。

主な問題は、エラーをチェックし、使用された入力が有効であることを確認する方法です。

文字セクションは終了しましたが、float と int について、数字のみが入力されていることを確認し、文字または記号が入力されている場合はエラー メッセージを出力するにはどうすればよいですか?

たぶんisdigit()、またはisaplha()それらの使用を実装する方法がわからないと思いました。

注: 入力には既に使用scanf()していますが、入力が有効かどうかを確認する方法がわかりません。

4

3 に答える 3

3

ユーザーが文字列、2 つの浮動小数点数、および整数を入力する必要がある場合は、

 char s[1024];
 float f1, f2;
 int i;

 if (sscanf (buff, "%s %f %f %d", s, &f1, &f2, &i) == 4) {
    /* Could scan values as expected. */
 } else {
    /* Input not as expected. */
 }

sincesscanfは、正常にスキャンされた値の数を返します。詳細については、sscanf のマニュアル ページを参照してください。で無制限の文字列をスキャンする%sと、大きな入力で問題が発生することに注意してください。これは、宿題では問題にならないかもしれませんが、プロダクション ソフトウェアでは注意が必要です。

于 2012-09-11T11:27:42.133 に答える
2

を使用sscanf()すると、文字列の内容を整数 (%d書式指定子を使用) や浮動小数点数 ( を使用%g) などのデータ型として解析することができます。

の戻り値はsscanf()、テキストが目的のデータとして正しく解釈されたかどうかを示します。

%nまた、何文字見たかを知る こともできるsscanf()ので、複数回に分けて分析したい場合に便利です。

于 2012-09-11T11:18:36.497 に答える
1

投稿で述べたように、 scanf() を使用している以外に、現在どのように値を取得しているかはわかりません。だから、あなたがこのようなことをしているとしましょう:

char buf[100];     
scanf("%s", buf); 

float/int 値を取得します。isdigit()それらがすべて数字の値であることを確認するために使用したい場合は、次のようにループできます。

int i = 0;

//need to check for a . for floats
//need to check for a - for negative numbers
while(isdigit(buf[i]) || buf[i] == '.' || buf[i] == '-') 
   i++;
if(i == strlen(buf))   // if we made it to the end of the string
   //we have all digits, do all digit code
else
   //there are numbers or symbols, ask for the number again, or terminate, or whatever
于 2012-09-11T12:35:15.310 に答える