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

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

ただいまの
回答率

90.48%

  • C

    3835questions

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

c言語の文字列のfor文の書きかたについて

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 206

tamura0425

score 3

 前提・実現したいこと

エラーの処理

c言語の課題でパスワード一致確認のプログラムを作っていますが
エラーが発生してしまいました。
Main.c:9:38: error: expected expression
for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
^
と表示されるのですが、学校のPCでは同じ書き方でいけたのですが
家のパソコン{パイザ}のIOでエラーのメッセージが起きてしまい困っています。
どなたかご教授いただければ幸いです。

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

Main.c:9:38: error: expected expression
for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
^
1 error generated.

 該当のソースコード

include <stdio.h>

int main(void){
char pas[]="Tokyo";
char star[256];
int i;
i=0;

scanf("%s",&star[256]);
for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
{
}
if(pas[i] == star[i]){
printf("一致");
}
else{ 
printf("不一致");
}
return 0;
}

 試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

check解決した方法

0

皆様に言われ、見直をしたところ原因がわかりました。(pas[i]!='\0');i++)
正しくはこれで、左側にpas[i]これが抜けていました。
皆様お忙しいところ本当にありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

(!='\0')

意味をなしません。どういうつもりで書いたのでしょうか?
これは、「が、'\0'で無いとき」ということなので、「何が??」となってしまいます。
「何」を書きましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 21:09

    すみません
    Main.c:9:38: error: expected expression
    for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
        ^
    このようにエラーが出てしまいました。
    ’¥0’でヌル文字が出るまでループカウンターを回したくてこのように書きました。

    キャンセル

  • 2018/06/21 21:10

    ちなみに、空文字判定は中身判定よりも先のほうが安全です。

    この場合はどちらでも同じですけど。

    キャンセル

  • 2018/06/21 21:11

    > ¥0’でヌル文字が出るまで
    どこに?

    キャンセル

  • 2018/06/21 21:15

    for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
    で入力した文字「star」がpasと一致するまでです。

    キャンセル

  • 2018/06/21 21:15

    Main.c:9:38: error: expected expression
    for(i=0 ;(pas[i] == star[i]) && (!='\0');i++)
                    ^
    1 error generated.

    キャンセル

  • 2018/06/21 21:16

    ここに出ます

    キャンセル

  • 2018/06/21 21:28

    「何」が'\0'と等しくないのが条件なのか、ちゃんと考えなさいという回答です。

    キャンセル

  • 2018/06/21 21:28

    どこにっていうのは、どの変数がって話で、
       != '\0'
    ↑ここになんもないです。
    つまりどこに\0が出るのでしょうか?
    pas[i]?star[i]?どちらでもたいして変わらないですがどこに?

    キャンセル

  • 2018/06/21 21:34

    > どこにっていうのは、どの変数がって話で、

    そう。「どの変数が'\0'で無いときなのか?」という話です。

    > ↑ここになんもないです。

    それがエラーの原因です。

    そこに何を書くべきかを自分で考えましょう。

    キャンセル

0

この場合ではwhile文のほうが可読性が上がります。
このこれ→(!='\0')は何を示してますか?
!の左に何か比較物が必要です。
そして文字列の比較はstrcmpを使ったほうがさらに可読性が上がります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

(!='\0');
比較するものがないのも動かない原因ですがfor文の中に何も書かれていないので何も処理されてません。
(入力の際scanfを使っていますがscanfは色んな意味で危険な関数なのでfgetsの使用をおすすめします。

私は以下のように書きました。

1.入力した文字の改行を消す。(fgetsなので)
2.入力した文字を一文字ずつ比較する

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

#define BUFSIZE 256

int main(void)
{
    char pas[] = "Tokyo";
    char star[BUFSIZE];
    int i;
    int judge = 0;

    fgets(star,sizeof(star),stdin);
    star[strlen(star) - 1] = '\0'; //最後の改行を削除
    if(strlen(pas) != strlen(star)){
        judge = 0;
    }
    else{
        for(i = 0; i < strlen(pas); i++){
            if(*(star + i) != *(pas + i)){
                judge = 0;
                break;
            }
            else{
                judge = 1;
            }
        }
    }
    if(judge == 1){
        printf("一致");
    }
    else{
        printf("不一致");
    }
    return 0;
}

 ほかの方法

strcmpを使えばすぐできます。

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

#define BUFSIZE 256

int main(void)
{
    char pas[] = "Tokyo";
    char star[BUFSIZE];

    fgets(star,sizeof(star),stdin);
    star[strlen(star) - 1] = '\0'; //最後の改行を削除

    if(strcmp(pas,star) == 0){
        printf("一致\n");
    }
    else{
        printf("不一致\n");
    }
    return 0;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • C

    3835questions

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