scanfについてなのですが、
C
1scanf("%d%d",&変数名,&変数名); 2scanf("%d %d",&変数名,&変数名);
このプログラムで
なんの問題もなく、プログラムが読み込まれるのですが、
どうして、空白を開けない場合と開けた場合では違いがでないのですが、どうしてなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 23:18
回答3件
0
C言語ってのは、実行時のエラーチェックは全く行いません。
なので、たとえ異常な動作をさせても、エラーは出ないし、その後はどうなるか不定です。
不定ということは、そのまま落ちるかもしれないけれど、そのまま何事もなく実行する(ようにみえる)かもしれないってことです。
ということで、違いがでない、とあなたが思うならそうかも知れません
#ましかし、常にそう動くわけでもない、ってところがポインツ
投稿2021/08/19 23:09
編集2021/08/19 23:10総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 23:16 編集
2021/08/19 23:18
2021/08/19 23:21
2021/08/20 00:43
2021/08/20 02:11
2021/08/20 02:18
2021/08/20 03:08
2021/08/20 03:39
0
"%d %d"の場合、データの間に空白(ホワイトスペース:空白文字とかタブ文字とか改行文字とか)がある形式にマッチしますが、
"%d"自体に「先頭の0個以上の空白を読み飛ばす」という働きがあるからです。
"123 456"
を"%d %d"で処理すると、"123"が最初の%dに、" "が書式指定の空白に、"456"が二番目の%dにマッチします。
"%d%d"の場合は、"123"が最初の%dに、" 456"が二番目の%dにマッチします。
投稿2021/08/19 22:07
総合スコア7703
0
ベストアンサー
scanf(書式、引数...) において、引数は格納先へのポインタです。
書式は、複数の指令を並べたものです。
指令には、次の 3種類があります。
・空白類文字 (isspace関数で規定される文字 ' ', '\t', '\n', '\v', '\f', '\r')
・通常の文字
・%で始まる変換指定
指令の空白類文字は、入力の 0個以上の空白類文字を読み飛ばします。
指令の通常文字は、それと一致する入力文字を読み飛ばします。
変換指定は、%d, %s, %c などですが、%c と %[ と %n 以外は、
入力の空白類文字を読み飛ばした後、指定した変換処理を行います。
scanf("A=%d", &n); なら、"A"、"="、"%d" の 3つの指令があり、
入力の "A=45" や "A= 45" で、n に 45 を読み込めますが、
入力の "45" や "A = 45" では、n に 45 を読み込めません。
%d は数字の列を読み込んで数値に変換しますが、
数字の列の終わりを知るために、1つ余分に文字を読み込みます。
しかし、その文字は入力バッファに押し戻されて、次の入力に使用されます。
以上の scanf の基本的な機能を理解できましたか?
コメントをお願いします。
"%d%d" は、%d %d" や "%d\t%d" や "%d\n%d" と同じ処理結果になります。
投稿2021/08/20 01:45
編集2021/08/20 02:45総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/20 02:52
2021/08/20 03:00
2021/08/20 03:12 編集
2021/08/20 03:21 編集
2021/08/20 05:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。