@haratyaaaaan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C言語 IF文のelseが動かない

大学でc言語の課題が出たのですが、内容はJapan+GermanyFranceの文字列を大文字を小文字に、小文字を大文字に、それ以外を@にしろというものでした。
以下のプログラムを作りましたが、実行結果がjAPAN+gERMANY
fRANCEになってしまい、どうもelseが動いてないようです
このプログラムは何が違うのでしょうか?
#include
#include
int main (){
char s[]="Japan+Germany*France";
int i;
for(i=0;s[i];i++){
if(s[i]<=90){
if (s[i]>=65){
s[i]+=32;
}
}
else if(s[i]<=122 ) {
if(s[i]>=97){
s[i]-=32;
}
}

else {s[i]=64;}

}  

   printf("%s\n",s);

    return 0;

}

0 likes

2Answer

+などの記号も最初のif文に入ってしまっています。
2重のif文ではなくAND条件にしてあげればうまくいくと思います。

- if(s[i]<=90){
-     if (s[i]>=65){
-         s[i]+=32;
-     }
- }

+ if(s[i]>=65 && s[i]<=90){
+     s[i]+=32;
+ }

また、コードブロックを使うと見やすくなるので、コードを載せる際はご活用ください。

3Like

回答済みなので、蛇足です。

 65  90  97  122
 a ・・ z   A ・・  Z
 ===+32==>
      <===ー32===

 目的の範囲から判定し、最後に対象外を処理するのが王道のプログラミングです。
しかし、対象外の範囲を除外しながらif判定する記述もあるもで紹介します。

if (s[i]<65 || s[i]>122) {
    s[i]=64;
} else if (s[i]<91) {
    s[i]+=32;
} else if (s[i]>96) {
    s[i]-=32;
} else {
    s[i]=64;
}

修正時バグを生む可能があり、嫌われる方も多いのですが、私は好んで記述します。

尚、<91、にするのは、類似言語で<=90か、=<90か?迷うからです。

if (s[i] < 65 || 122 < s[i]) {
  ・・・
} else if (96 < s[i]) {

中には判定の向きを統一する方もいます。

1Like

Your answer might help someone💌