C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kend

C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

#1

投稿記事 by kend » 3年前

[1] 質問文
 [1.1] 自分が今行いたい事は何か
・私は現在scan()でスペース区切り以降の文章を読み込むことが出来なくて困っております。

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
以下のコードは文章をn回入力して、n行の文章を表示するプログラムを作成しております。

コード:

#include <stdio.h>
int main(void){
    
    int n;
    char str[100];
    
    scanf("%d",&n);
    
    for(int i=0;i<n;i++){
        scanf("%[^\n]",str);
        printf("%s\n",str);
    }    
}
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
・Wrong Answer
というエラーメッセージが表示されます。
 [1.4] 今何がわからないのか、知りたいのか
・scanf("%[^\n]",str);
と入力すれば、改行以外の文字列は全て読み込めると思っていたのですが、
Wrong Answerとエラーメッセージが表示される原因が分からずに困っております。

かと言ってscanf("%s",str);
と入力するとスペースを読み込めない問題点にも現在は直面しております。
[2] 環境  
 [2.1] OS : Windows, Linux等々
Windows
 [2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
C言語学習サイト内でのプログラミング開発ツールを使用しております。

[3] その他
 ・どの程度C言語を理解しているか
C言語を初めて3か月ほどで、関数など初歩的なC言語知識はございます。
 ・ライブラリを使っている場合は何を使っているか

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

#2

投稿記事 by みけCAT » 3年前

%[^\n]は入力前に空白文字を読み飛ばさないので、%dで読み込んだ後の改行で引っかかってしまいます。
%[^\n]の前に半角スペースを入れることで空白文字を読み飛ばすようにできますが、
これだと行頭に半角スペースがある場合、それも読み飛ばされてしまいます。
%dおよび%[^\n]の後に%*cを入れることで、1文字(すなわち、改行文字)を読み飛ばすことができます。

コード:

#include <stdio.h>
int main(void){
    
    int n;
    char str[100];
    
    scanf("%d%*c",&n);
    
    for(int i=0;i<n;i++){
        scanf("%[^\n]%*c",str);
        printf("%s\n",str);
    }    
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Meta3

Re: C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

#3

投稿記事 by Meta3 » 3年前

C言語の課題演習で
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
以下のコードは文章をn回入力して、n行の文章を表示するプログラムを作成しております。

for(int i=0;i<n;i++){
scanf("%[^\n]%*c",str);
printf("%s\n",str);
}

はなにか勘違いをされてます。C言語の文字列で検索すればたくさん情報があります
(文字列は1次元配列なので2次元配列が必要です)


しん
記事: 4
登録日時: 3年前

Re: C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

#5

投稿記事 by しん » 3年前

>>みけCAT 様
前回に引き続き今回も詳しく解説ありがとうございます。

みけCAT様のソースコードをコピー&ペーストしたら、無事にエラーメッセージなく実行できました。
また掲示板で質問することはあるので、また次回もアドバイスやコメント頂けると嬉しいです。

今回は本当にありがとうございました。

しん
記事: 4
登録日時: 3年前

Re: C言語の課題演習において、scanfのスペース区切りの文字列の読み込みについて困っております。

#6

投稿記事 by しん » 3年前

>>Meta3様
前回に引き続き今回もコメントをありがとうございます。

また今後掲示板に不明点などを質問すると思うので、もしまた機会がありましたらよろしくお願いいたします。

返信

“C言語何でも質問掲示板” へ戻る