ID非公開

2021/4/16 23:05

33回答

以下のプログラム問題が何度挑戦してもできません。 どなたか知恵を拝借させていただきたいです。

C言語関連37閲覧

ベストアンサー

0

ID非公開

質問者2021/4/17 0:35

ご回答ありがとうございます。 よろしければ、下記の条件を取り入れた場合はどのようなプログラムになりますかお教えいただけないでしょうか? 一度にお伝えできず、申し訳ありません。 文字を文字列としてでは無く、一文字ずつの文字データとして扱うため、「文字を一文字だけ標準入力から取得」「文字を一文字だけ標準出力に出力」するため、「1文字の取得と出力を4セット」で書いた場合。

ThanksImg質問者からのお礼コメント

2通りの返答をしていただきましたこと、深くお礼申し上げます。

お礼日時:4/17 14:11

その他の回答(2件)

0

~プログラム例~ #define _CRT_SECURE_NO_WARNINGS //Visual Studio 用 #include <stdio.h> int main() { printf("4文字の英単語:"); for (int i = 0;i < 4; ++i) { char 文字; if (scanf("%c", &文字) == 1) printf("%c", 文字); else break; } printf(" が入力されました。\n"); } 《解説》 … 文字と文字列 … 課題要件として「"文字"を入力するscanf()を何度使用してもよい」とあり、「"文字"」と強調されています。 その意味するところは「文字列」ではなく、「文字」ということ。文字配列(あるいはポインタ)ではなく文字、char*, char[] ではなくて char、という風に捉えるのが適切であると考えます。 scanf で文字を受け取るには上に掲げた例のように "%c" を使います。 … scanfとif文 … そして、scanf は失敗する場合があり(入力源において EOF となった場合など)、その場合は値は得られていません。そのことを判断するために if 文を置いています。 scanf は入力できた項目の数を返してきます。上の例では "%c" として一つの項目だけを受け取ろうとしているものであり、したがって成功すると 1 が返って来ます。 … for文 … 「必ず四文字入力される前提」とありますので for 文で4回繰り返す処理としてみました。上述の if 文は異常事態に対処するためのもので、そのような事態では4回繰り返すことなく途中で break します。 … 変数 … for 文の括弧内に int i の宣言部分も含める形としましたが、これはコンパイラのバージョンが極端に古いものとなっているとエラーになってしまいます。 その場合は、 int i; printf("4文字の英単語:"); for (i = 0;i < 4; ++i) { こうすると上手く行きます。ここで int i; は printf よりも上に持って行くことが大切です。 文字を受け取るための変数の名前を「文字」としてみました。現代の多くのコンパイラでは、このように漢字で書かれた変数名をそのまま用いることが出来ます。 しかし、やはりコンパイラによってはエラーとなる可能性もあります。そのような場合は、 for (int i = 0;i < 4; ++i) { char ch; if (scanf("%c", &ch) == 1) printf("%c", ch); else break; } このように変数名を ch 等とすると良いです。(はじめからそうしておけば良いということも言えるかもしれませんが…) なお、コンパイラが幾ら古くても、char ch; の宣言の位置はこれで大丈夫です。char ch; を他の場所に移す必要はありません。

0

こういった場合は、挑戦したソースコードを載せて添削してもらうのが一番です。 あと、「必ず四文字入力される前提で作成しなさい」というのは、4文字未満、あるいは4文字以上だとエラー出力するんでしょうかね?前提がイマイチわからないです。