Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で文字・文字列・文(空白を含む文字列)を読み書きするプログラム

C言語でプログラミングをしていると、「1文字」「文字列」「そして空白を含む文」の3種類の入力を受け取りたい場面があります。本記事では、これら3つの入力を受け取って、そのまま同じ内容を出力する方法を解説します。なお、文字列の最大サイズは500とします。

入力例と出力例

たとえば、入力が以下のようになっている場合を考えてみましょう。

character = 'T'
string = "ProgrammingLanguage"
sentence = "I love programming through C"

このとき、期待される出力は次の通りです。

Your character: T
Your string: ProgrammingLanguage
Your sentence: I love programming through C

解決のための手順

この問題を解くには、以下の手順に従います。

  • 1文字を読み込むには、scanf("%c", &character); を使用します。

  • 空白を含まない文字列を読み込むには、scanf("%s", string); を使用します。

  • この手順は必須ではありませんが、状況によって必要になります。プログラムによっては、次の入力を待たずに処理が進んでしまうことがあります。そのような場合は、fflush(stdin) を使って入力バッファをクリアしましょう。

  • 空白を含む文を読み込むには、fgets() 関数を使用します。第1引数は格納先の文字列、第2引数は読み込むサイズ、第3引数はコンソール(標準入力)から受け取るための stdin を指定します。

  • 最後に、改行文字まで含めて文字列の終端として扱うことで、空白も正しく読み込めるようになります。

実装例

それでは、実際のコードを見て理解を深めましょう。

#include <stdio.h>
int main(){
    char character;
    char string[500];
    char sentence[500];
    scanf("%c", &character);
    scanf("%s", string);
    fflush(stdin);
    fgets(sentence, 500, stdin);
    printf("Your character: %c\n", character);
    printf("Your string: %s\n", string);
    printf("Your sentence: %s\n", sentence);
}

入力

T
ProgrammingLanguage
I love programming through C

出力

Your character: T
Your string: ProgrammingLanguage
Your sentence: I love programming through C

補足:fflush(stdin)について

scanf("%c")scanf("%s") の直後に fgets() を呼び出すと、入力バッファに残った改行文字が原因で、意図した通りに動作しないことがあります。fflush(stdin) は標準C規格では未定義動作とされていますが、多くの環境(Visual Studioなど)では入力バッファをクリアする目的で広く使われています。移植性を重視する場合は、getchar() を使って残りの文字を読み捨てる方法も検討するとよいでしょう。

  1. 【C#】文字列からn番目の文字を削除する方法

    C#で文字列から特定の位置にある文字を削除したい場合は、Remove()メソッドを使用します。このメソッドでは、削除を開始するインデックス位置と、削除する文字数を指定できます。基本的な使い方まず、対象となる文字列を設定します。string str1 = "Amit"; Console.WriteLine("Original String: "+str1);次に、StringBuilderを作成し、4番目の位置(インデックス3)にある文字を1文字削除します。なお、C#のインデックスは0から始まるため、先頭の文字がインデックス0に相当することに注意してくださ

  2. C#で文字列内の特定の文字を変更する方法

    C#では、string型は不変(イミュータブル)であるため、文字列の一部を直接書き換えることはできません。そこで活躍するのが StringBuilder クラスです。StringBuilder を使えば、インデックスを指定して文字を自由に変更できます。StringBuilderの準備まず、変更対象となる文字列を StringBuilder に格納します。ここでは「pre」という文字列を使用します。StringBuilder str = new StringBuilder(); str.Append(pre);指定した位置の文字を変更する文字を変更するには、変更したいインデックスに対して新しい文