質問

Cは整数と文字の間の変換をどのように処理しますか?整数変数を宣言し、ユーザーに数値を要求したが、代わりに文字列を入力したとします。どうなりますか?

役に立ちましたか?

解決

ユーザー入力は、atoiまたは別の変換関数を使用してintに変換する必要がある文字列として扱われます。文字列に文字または他の非数値文字が含まれているために文字列を数字として解釈できない場合、Atoiは0を返します。

MSDNのatoiドキュメントでもう少し読むことができます- http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

他のヒント

え? 常に文字列を入力します。次に、さまざまなエラー(オーバーフロー、不正な文字など)を処理するさまざまな方法(もう一度尋ねる、デフォルト値を取得するなど)で、この文字列を数値に解析変換します。

注意すべきもう1つの点は、Cでは文字と整数が「互換性がある」ことです。ある程度まで。任意の文字をintに割り当てることができます。逆もまた機能しますが、整数値が文字に収まらない場合は情報が失われます。

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff)

他の人が指摘したように、データは通常文字列として入力されます-唯一の質問は、読み取りを行うためにどの関数が使用されるかです。 GUIを使用している場合、関数はすでに整数への変換とエラーの報告を適切な方法で処理している可能性があります。標準Cを使用している場合、通常は値を文字列に読み込んで(おそらく fgets()を使用してから変換します。 atoi()は使用することはめったに最良の選択ではありません;問題は、変換が成功したかどうかを判断することです(そして、ユーザーがゼロの正当な表現を入力したためゼロを生成しました)。

一般に、 strtol()またはその親類( strtoul() strtoll() strtoull()を使用します。 );浮動小数点数を変換するには、 strtod()または同様の関数を使用します。整数変換ルーチンの利点は次のとおりです。

  • オプションのベース選択(たとえば、10進数、10進数-16進数、8進数-8進数、または標準C規則を使用した上記のいずれか(8進数の場合は007、16進数の場合は0x07、10進数の場合は7))
  • オプションのエラー検出(変換が停止した場所を知ることによる)。

これらの関数の仕様の多くに行く場所(実際のC標準のコピーを見ないとき)は、 POSIX Webサイト(C99機能を含む)。 Windows中心ではなくUnix中心です。

プログラムがクラッシュします。atoi関数を呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top