【解決方法】識別子予想エラーの対処法はこちら



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

// Points assigned to each letter of the alphabet
int POINTS[] = {1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10};

int compute_score(string word);

int main(void)
{
    // Get input words from both players
    string word1 = get_string("Player 1: ");
    string word2 = get_string("Player 2: ");

    // Score both words
    int score1 = compute_score(word1);
    int score2 = compute_score(word2);

    // TODO: Print the winner
    if (score1>score2)
    {
        printf("Player 1 Wins!");
    }
    else if (score1<score2)
    {
        printf("Player 2 Wins!");
    }
    else
    {
        printf("Tie!");
    }
}

int compute_score(string word);

    // TODO: Compute and return score for string

    int score =0;

    for i ( int i =0; i<strlen(word); i++)
    {
        if (isupper(word[i]))
        {
            score = score + POINTS[word[i]-65];
        }

        if (islower(word[i]))
        {
            score = score + POINTS[word[i]-97];
        }
        return score;

    }

私が試したこと:

別の場所にブラケットを追加しようとしましたが、何も起こらないようです
エラーは次のとおりです。

scrabble.c:42:5: error: expected identifier or '('
    for i ( int i =0; i<strlen(word); i++)
    ^
1 error generated.
make: *** [<builtin>: scrabble] Error 1
scrabble/ $ 

解決策 3

見積もり:

scrabble.c:42:5: エラー: 予想される識別子または ‘(‘
for i ( int i =0; i =”” ^
1=”” エラー=”” が生成されました。
make:=”” ***=”” [<builtin=””>: scrabble] エラー 1
スクラブル/ $

あなたはそれを見たいかもしれません for より密接に述べます。 ルックアップに行く C の for ループ[^] そしてそれを読んでください。 ステートメントの形式を見ると、何が間違っていたかがはっきりとわかります。

解決策 1

まず第一に、それは C ではありません – または少なくとも完全に標準的な C – または C# ではありません。 std::string 型を持つ C++ である可能性がありますが、C にはありません。
それが本当に重要なので、それがどの言語であるかを理解することから始めましょう!

第 2 に、構文エラーに関しては、すべての情報を調べることが重要です。まず、「コードのどの行でエラーが発生していますか?」から始めます。
また、オンライン コンパイラを使用して C、C#、さらには C++ としてコンパイルできないため、問題を直接修正することはできません。

また、コーディング中に毎日、おそらく 1 日に何度も構文エラーが発生することを想定しておく必要があることに注意することも重要です。経験の豊富さに関係なく、誰もがそうです! 変数やキーワードのスペルを間違えることがあります。 文字列やコード ブロックを閉じるのを忘れることがあります。 猫があなたのキーボードの上を歩いて、とても奇妙なことをタイプすることがあります。 メソッド呼び出しに必要なパラメーターの数を忘れてしまうことがあります。

我々はすべての間違いを犯します。

そして、私たちは皆そうしているので、構文エラーを修正する必要があります。他の人が修正してくれるのを待つよりも、方法を学んで自分で修正する方がはるかに迅速です! したがって、エラー メッセージの読み方と、コンパイラが間違っていると言っていることに照らして記述されたコードを解釈する方法を学ぶことに少し時間を費やしてください。

だからこれを読んでください: 問題を解決するコードの書き方、初心者向けガイド パート 2: 構文エラー[^] – 次回コンパイル エラーが発生したときに役立つはずです。

見積もり:

私はそれに気づいたので、私がこれを投稿したときだけその時それを削除しました

しかし今は
#for (int i = 0; i < strlen(word); i++)#
それでも手がかりがありません ここに明確なエラーが表示されません 助けてください

私が提供したリンクをたどっていたなら、先月のある時点でそれはかなり明白だったはずです…

for ループが含まれる関数宣言全体、特に関数定義行を見てください。 ここで何が問題なのですか:

C
int compute_score(string word);

    // TODO: Compute and return score for string

    int score =0;

    for i ( int i =0; i<strlen(word); i++)
    {

問題が見えますか?

そうです。
ヒント: セミコロンは何をしますか?

正直なところ、常に構文エラーが発生します。自分で見つけることができるはずのセミコロンで 1 か月を無駄にしました! リンクをたどり、エラー メッセージについて考えてみてください。エラー メッセージは本当にあなたを助けようとしています。 😀

解決策 4

他の人が言ったことに加えて、これの 2 番目の発生

C++
int compute_score(string word);

する必要がある 定義 (つまり、実装する)この関数ではなく 宣言する それ。 前にも宣言したでしょ main、だから今それが必要です

C++
int compute_score(string word)
{
   // your code
}

これが C++ であると仮定すると、 string はオブジェクトであり、可能な限り行うべき 2 つのことは次のとおりです。
(a) オブジェクトパラメータを渡す 参照、作成のオーバーヘッドを回避するため コピー それの: string& word

(b) パラメータを作る const 関数がそれを変更しない場合: const string word

これらの両方がここに適用されるため、この関数のより良いシグネチャは次のとおりです。

C++
int compute_score(const string& word)
{
   // your code
}

また、 strlen(word) 動作しません: strlen C文字列用です(char*)、C++ 文字列ではありません。 あなたがしたい word.size() 代わりは。

解決策 2

あなたのコードは C# ではなく純粋な C のようです。 したがって、そのようなタイプはありません string Cでは、使用する必要があります char*. また、コーディングしていません get_string 関数。

コメント

タイトルとURLをコピーしました