2017-02-03 6 views
0

私はCS50のEDXの週2上だし、コンパイルしようとすると、次のエラーを得続ける場合:声明(初心者)

caesar.c:23:7: error: expected expression if (isalpha(encryptme[p]) = true){ ^

はここに私のコードです:

見つめ
#include <stdio.h> 
#include <cs50.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

int main(int argc, string argv[]) 
{ 
    if (argc !=2) { 
    printf("ERROR: Must pass exactly two command line arguments!\n"); 
    return 1;} 

    string num = argv[1]; 
    int i = atoi(num); 

    printf("plaintext: "); 

    string encryptme = get_string(); 

    printf("cyptertext: "); 

    for (int p = 0; p <= strlen(encryptme); p++)(
     if (isalpha(encryptme[p]) = true){ 
     printf("%c",encryptme[p]+i%26); 
     } 
    ) 
} 

これは1時間以上は、私の間違いなく間違いなく奇妙なエラーを見つけてください、1時間以上を検索しました!

+0

のしている - 。これは、作成することになっています比較的簡単に暗号化することができます。コマンドラインは最初にプログラムを呼び出す2つ目の引数と、暗号化をオフにする#の2つの引数を受け入れるものとします – rookie

+0

これを変更しますif(isalpha(encryptme [p])= true) '** to **' if(isalpha(encryptme [p])== true) ' – Chip

答えて

1

=の代わりに==が必要です。

前者は同等性テストです。後者は割り当てです。

ただし、trueとは比較できません。ベストだけでも

if (isalpha(encryptme[p])) 

を言うことです、でも、それは私がcs50.hにあるかわからないんだけどC.のすべてのバージョンでサポートされていないC.でtrueを使用するように注意してください。いくつかの間隔は、より従来のようにインデントをクリーンアップ

for (int p = 0; p <= strlen(encryptme); p++) { 
    if (isalpha(encryptme[p])) { 
     printf("%c", encryptme[p] + i % 26); 
    } 
} 

:たぶんtrue ......、そこに

そうでないかもしれないです私はこのようにそれを行うだろう。 {ため(の検出が最初に作られた場所それだったので(また、あなたはjdowの答えを受け入れるべきループ for (int p = 0; p <= strlen(encryptme); p++)(ため

+0

ありがとうございます - 間違いなく間違いですが、修正しました再コンパイルしても、同じエラーメッセージが表示されます。 – rookie

+0

私の答えを編集....たぶん、問題は「真」そのものです。 –

+0

面白いですが、cs50.hを組み込む必要があります。他の修正を加えた後にコンパイルされます。 – rookie

0

あなたはそれがまた()に囲まれた文ではなく、{}

+0

ありがとうございます。これはRayの助けを借りてコンパイルしました。 – rookie

+0

お手伝いしてうれしいです。 – jdow