ページ 11

%cと%sの違い

Posted: 2016年4月21日(木) 23:16
by hogged
大文字と小文字の組み合わせが同じであるかどうかを調べるプログラムを書いているのですが、その時に

コード:

scanf("%c %c", &C, &c);
scanf("%s %s", &C, &c);
のどちらにすればいいのかよくわからなくなりました。
以下が書いたプログラムです。

コード:

#include <stdio.h>
#include <ctype.h>

int main (void)
{
	char C, c, numC;

	scanf("%c %c", &C, &c);
	
	numC = toupper(c); //小文字を大文字へ

	if (C == numC){
		printf("Yes\n");
	}
	else{
		printf("No\n");
	}

	return 0;
}
%sでやると正常に動きません。違いを教えてください。

Re: %cと%sの違い

Posted: 2016年4月21日(木) 23:21
by box
hogged さんが書きました: %sでやると正常に動きません。違いを教えてください。
%c : 単一の文字
%s : 文字の並び

Re: %cと%sの違い

Posted: 2016年4月21日(木) 23:24
by baby2478nishi
http://www.k-cube.co.jp/wakaba/server/format.html

簡単に言えばhttp://oshiete.goo.ne.jp/qa/3027949.htmlここに書いてあるように
誤----------------------------
char c;

scanf("%s", &c);
printf("%s\n", &c);
誤----------------------------

例に上げられている後のプログラムは間違いです。たまたま正しく動いているように見えるだけです。
%sはNull終了の文字列を扱うので、通常は以下のように書きます。

正----------------------------
char str[100];

scanf("%s", str); // strは配列の先頭を示すアドレス
printf("%s\n", str);
正----------------------------
ということです。つまり、%sハイチ文字ごとに保存するのでその分”入れる箱”を用意する必要があります。