文字の変換について

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

文字の変換について

#1

投稿記事 by saaya » 12年前

半角アルファベットの大文字を小文字に、小文字を大文字に変換したいのですが、動かしてみると違う文字が出てきます。
もしよろしければここを変えた方がいいなどアドバイスお願いします。

コード:

#include <stdio.h>
#include <string.h>
int main()
{
	char x[100], y, z;
	int count;
	printf("string=");
	scanf("%s", x);

	count = 0;
	y = 0;
	while (count < 100){	
		if (x[count]=='\0'){
			break;
		}
		else {
			count++;
			y = x[count];
			if ((y >= 'A') && (y <= 'Z')){
				z = y + 0x20;
				printf("%c", z);
			}
			else ((y >= 'a') && (y <= 'z'));{
				z = y - 0x20;
				printf("%c", z);
			}			
		}
	}
	return 0;
}

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

Re: 文字の変換について

#2

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

else文のところが間違っています。
isupper、islower、toupper、tolower関数を使ってはいけないのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 文字の変換について

#3

投稿記事 by へにっくす » 12年前

もっと具体的に言った方が親切かと ^^;

コード:

else ((y >= 'a') && (y <= 'z'));{
なんですかこれ?elseの後に条件文はつけられません。
ifを忘れちゃダメですよ。
written by へにっくす

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

Re: 文字の変換について

#4

投稿記事 by naohiro19 » 12年前

gccやVisual Studio、Boland C++ コンパイラではこのプログラムはコンパイルできません。

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

Re: 文字の変換について

#5

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

へにっくす さんが書きました:もっと具体的に言った方が親切かと ^^;

コード:

else ((y >= 'a') && (y <= 'z'));{
なんですかこれ?elseの後に条件文はつけられません。
ifを忘れちゃダメですよ。
条件文の後に余計なセミコロンがついているのも問題です。
naohiro19 さんが書きました:gccやVisual Studio、Boland C++ コンパイラではこのプログラムはコンパイルできません。
Ideoneで試すと、コンパイルエラー扱いにはならないけど何も出力されない、という謎現象が発生しました。
なぜでしょうか…?
http://ideone.com/cX4N8E

さらに、ローカルで試すと以下のようになりました。
mozi_no_henkan_test.png
ローカルでコンパイルするテスト
mozi_no_henkan_test.png (57.97 KiB) 閲覧数: 3636 回
「コンパイルできません」は間違いのようですが、やはり実行結果がおかしいです。
最後に編集したユーザー みけCAT on 2013年7月14日(日) 16:18 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
a5ua
記事: 199
登録日時: 14年前

Re: 文字の変換について

#6

投稿記事 by a5ua » 12年前

コード:

#include <stdio.h>
#include <string.h>
int main()
{
	char x[100], y, z;
	int count;
	printf("string=");
	scanf("%s", x);

	count = 0;
	y = 0;
	while (count < 100){    
		if (x[count]=='\0'){
			break;
		}
		else {
			count++;
			y = x[count];
			if ((y >= 'A') && (y <= 'Z')){
				z = y + 0x20;
				printf("%c", z);
			}
			else
				((y >= 'a') && (y <= 'z'));	/* 意味のない文 */
			
			/* 条件にかかわらず実行される */
			{ 
				z = y - 0x20;
				printf("%c", z);
			}           
		}
	}
	return 0;
}
コンパイルは出来ると思いますが、意図した動作にはならないでしょう。
上記に様にコードを整形すればわかると思います。

問題点はいくつかありますが、2点ほど指摘します。

コード:

count++;
y = x[count];
count番目の文字を見たいのなら、インクリメントのタイミングが不適切です。

コード:

else ((y >= 'a') && (y <= 'z'));{
else if (条件)とすると良いと思います。

閉鎖

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