错误的 if 语句(初学者)

Faulty if statement (beginner)

我在 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);
      }
   )
}

看了一个多小时,搜索了一个多小时,请找出我这无疑是愚蠢的错误!

您需要 == 而不是 =

前者是平等检验;后者是一个作业。

但是最好不要与true比较。最好只说

if (isalpha(encryptme[p]))

此外,即使在 C 中使用 true 也要小心。并非所有版本的 C 都支持它。我不确定 cs50.h 中的内容。也许 true 在那里,也许不......

我会这样做:

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

清理了一些间距和缩进,使其更加常规。 (你也应该接受 jdow 的回答,因为那是首先检测 {( 的地方。

你的 for 循环 for (int p = 0; p <= strlen(encryptme); p++)( 的语句包含在 () 而不是 {}