ID非公開

2022/6/15 16:05

44回答

c言語です。scanfの%sで文字列を入力するじゃないですか?この入力するときに文字列の中に空白が入ってるとその空白が自動的に\0となってしまって表示させるときにそこまでの文字列までしか表示されないですよね?こ

補足

答え、出ました。for文の中でscanf("%c",a[i])を使う方法でした。この回の課題は全部%sを使ってたのでcを使う発送は出てくるはずもなく。これでfor文の中でif(a[i] == '\n')で判別してfor文を抜け出しているんですけど、1つよくわからないことがあります。for文の中にあるscanf(%c)で入力した場合、配列の1番目(0)から一文字ずつ入れられていくんですか?このコードを見たときこれだと自分が一文字ずつ入力しなきゃだめじゃない?と思いましたがふつうにaaa bbbなどで連続で入力してもaaa bbbと出てきます。

C言語関連251閲覧xmlns="http://www.w3.org/2000/svg">250

ベストアンサー

1

1人がナイス!しています

>for文の中にあるscanf(%c)で入力した場合、 for文とscanfには関係がありません。 scanfの%cは、ストリームから最初の一字を受け取り、指定されたアドレスへと書き込む。 それだけの機能です。 プログラミングでは、単純な機能を組み合わせて複雑なものを作りますが、 かと言って組み合わせによって機能が変わったりすることはありません。 一つ一つはそれ自体の機能を行うだけです。 そこをしっかり切り離して考えないと、組み合わせの度に覚えることが爆発的に増殖して大変な事になります。 これらとで大事なことです。 >配列の1番目(0)から一文字ずつ入れられていくんですか? 書き込む場所を指定しているのは、scanfでは無く、a[i] です。 (正確には、&a[i] だと思いますが) iが変わる事で配列の中の指すアドレスが変化するので、異なる場所への書き込みとなります。

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

あなたの回答が一番わかりやすかったです。ありがとうございました。他の方々もありがとうございました

お礼日時:6/15 22:46

その他の回答(3件)

1

scanfの書式指定"%s"とはなにかは習っているのですね?「空白, TAB, 改行を区切りにして文字列を取得する」というものなので、空白と改行の区別なくそこで入力が終了するものです。それはCの規格に書かれている事項なので、scanfを%sで使う限りはソレをどうにかすることは不可能としかいいようがないです。 ということで、scanf+"%s"以外の手段を使わなければどうにもならないのですが、では何ならよいのか... とりあえず、あなたの解釈でなく問題文をすべて示していただけませんか。特に、使ってはいけないという「他の関数など」の"など"の範囲を明らかにしてください。あなたが習った全てを提示してくれないなら、そこから読み解くしかないのですから。 (ついでに確認ですが、習ったものでなければいけない、というのもあなたの思い込みなどではなく、指示された事項なのですね?)

1人がナイス!しています

> cを使う発送は出てくるはずもなく あり得ないことなら、「解無し」と言い切ればいいじゃないですか。 > aaa bbbなどで連続で入力してもaaa bbbと出てきます。 scanfの書式指定"%c"は、入力から一文字を取得する、それ以上でも以下でもありません。入力に順次 'a' 'a' 'a' ' ' 'b' 'b' 'b'が与えられたらそれを順次取り込むだけの話です。なぜ習ってもいないのに'a'と'a'の間に区切りがあることにしてしまうのですか?

0

>>それもまだ習ってないんです…おそらく習ってないことを使わなくても解けるはずなんです…他にないですか? 「それ 」がどれかも分からないし何を学んだのかも分からないのに答えられるわけが無い ので、先生に聞いてください

ちなみに、習ったことしか使えないような学校はロクでもない学校です。 技術は日々アップデートされているのに、初期バージョンしか使えないような人が先生というのはあまり信用に値しません

3

#include <stdio.h> int main(void) {     char a[128];     scanf("%[^\n]%*c", a);     printf("%s\n", a);     return 0; } ー 実行結果 ー This is a pen. This is a pen.

3人がナイス!しています

ID非公開

質問者2022/6/15 16:11

それもまだ習ってないんです…おそらく習ってないことを使わなくても解けるはずなんです…他にないですか?