みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語 strcmp 半角スペースがあるとだめ?

C言語 strcmp 半角スペースが文字列に含まれている場合
文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか?

プログラム
//strcmp

#include <stdio.h>
#include <string.h>

int main(void){

char input[256];
char str[] = "HelloWorld!";
  //char str[] = "Hello World!";だとうまくいかない。

printf("%s\n>", str);
scanf("%s", input);
if ( strcmp(input, str) == 0){
printf("同じです。\n");
}else{
printf("違います。\n");
}



return 0;
}

投稿日時 - 2018-02-11 14:23:06

QNo.9427920

困ってます

質問者が選んだベストアンサー

scanf()で
Hello World!
のように半角空白を入れたのであれば、
今のコードではinput[]に
Hello
までしか入っていないはずです。printf()か何かで確認してみてください。
scanf()における書式文字列の見直しが必要でありそうです。

投稿日時 - 2018-02-11 15:43:11

補足

printfでinputの内容を確認したところたしかにHelloまでしか入っていませんでした。
scanfについて調べてみたいと思います。

投稿日時 - 2018-02-11 16:26:10

お礼

回答有難うございます。

投稿日時 - 2018-02-11 16:26:23

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

scanfの%sは、「次の空白文字まで読み込む」です。
行全体を読み込むのは、fgets関数を使って下さい。この場合は、末尾の改行文字まで入力されるので、それを取り除いてから比較することになります。
scanfの書式文字指定は難解なので、初心者はscanfを使わない方が良いです。

投稿日時 - 2018-02-11 22:15:17

補足

fgetsを使えばいいんですね。わかりました。

投稿日時 - 2018-02-12 17:58:17

お礼

回答有難うございます。

投稿日時 - 2018-02-12 17:58:26

ANo.3

>同じはずなのですが違いますと出力されます。。

strcmp("Hello World!", "Hello World!")
で調べてみたらどうですか。

投稿日時 - 2018-02-11 16:01:32

補足

scanfによる読み込みがうまくいっていなかったのが原因でした。

投稿日時 - 2018-02-11 16:27:28

お礼

回答有難うございます。

投稿日時 - 2018-02-11 16:27:39

ANo.1

コンピュータの世界では半角スペースも文字です。ただそれだけのことです。

>半角スペースがあると比較できない

というのは違っています。
「Hello World!」と
「Hello World!」は同じ文字列だと判断されるはずですが。

投稿日時 - 2018-02-11 15:20:04

補足

同じはずなのですが違いますと出力されます。。

実行結果
-------------------
Hello World!
>Hello World!
違います。
--------------------

投稿日時 - 2018-02-11 15:45:58

お礼

回答有難うございます。

投稿日時 - 2018-02-11 15:46:13

あなたにオススメの質問