質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

352閲覧

if 文の周りでのエラーが解決できません。

takuyakubokun

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/10/03 04:19

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

if 文のまわりでエラーが起きていて理由の見当が尽きません

エラーメッセージ ```.c: In function ‘check’: 03.c:28:8: error: expected ‘}’ before ‘else’ else{ ^ 03.c: At top level: 03.c:43:1: error: expected identifier or ‘(’ before ‘}’ token } ^ ### 該当のソースコード ```ここに言語名を入力  c言語です ソースコード

試したこと

ここに問題に対して試したことを記載してください。
int check(void){
char str[30];
int i;
printf("英小文字および数字を使った文字列を入力してください:");
scanf("%s",str);
for(i=0;str[i]!='\0';i++){

if(islower(str[i]) || isdigit(str[i])){ return 0; else{ if(islower(str[i]) || !(isdigit(str[i]))){ return 1; } else if(!(islower(str[i])) || isdigit(str[i])){ return 2; } else{ return 3; } } }

}

}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
試し書きの最中でコードが汚くて住みませんよろしくおねがいします。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

まず、'{'と'}'の対応を確認しましょうd^^
03.c:28:8: error: expected ‘}’ before ‘else’
else{
については'}'を追加しましたが、こんどは最後の'}'が余分です。
vim
「追記」
出来ることならソースはそのまま載せましょう。エラーメッセージの行番号での検索が難しくなります。
「加筆」

c

1int check(void) 2{ 3 char str[30]; 4 int i; 5 printf("英小文字および数字を使った文字列を入力してください:"); 6 scanf("%s", str); 7 for (i = 0; str[i] != '\0'; i++) { 8 9 if (islower(str[i]) || isdigit(str[i])) { 10 return 0; // ←小文字あるいは数字 11 // …此処で拾っているからelse節には小文字/数字以外! 12 } else { 13 if (islower(str[i]) || !(isdigit(str[i]))) { 14 return 1; // ←小文字か数字以外 15 } else if (!(islower(str[i])) || isdigit(str[i])) { 16 return 2; // ←数字か小文字以外 17 } else { 18 return 3; 19 } 20 } 21 } 22} 23/* 24 結局else節の数字や小文字の判定はいらないのでは? 25*/ 26

文字列に小文字あるいは数字以外が含まれているか判定しているようですが、"a0B-=*/"等の入力があっても0が帰りますがいいのでしょうか?

投稿2018/10/03 04:37

編集2018/10/03 05:07
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ここの部分ですね。

c

1 if(islower(str[i]) || isdigit(str[i])){ 2 return 0; 3 else{

if文の後の処理が1文であるなら{は省略できますが、{を付けたら閉じないと辻褄があわなくなります。
こう書くか、

c

1 if(islower(str[i]) || isdigit(str[i])){ 2 return 0; 3 }else{

こう書くとよいです。

c

1 if(islower(str[i]) || isdigit(str[i])) 2 return 0; 3 else{

投稿2018/10/03 04:31

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

インデントを揃えてみましょう。

C

1for(i=0;str[i]!='\0';i++){ 2 if(islower(str[i]) || isdigit(str[i])){ 3 return 0; 4 // ここの括弧閉じは? 5 else{ 6 if(islower(str[i]) || !(isdigit(str[i]))){ 7 return 1; 8 } 9 else if(!(islower(str[i])) || isdigit(str[i])){ 10 return 2; 11 } 12 else{ 13 return 3; 14 } 15 } 16}

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
C

投稿2018/10/03 04:24

編集2018/10/03 04:25
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuyakubokun

2018/10/03 06:35

else の片方しかみてませんでした笑ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問