2015-11-29 3 views
0
#include <stdio.h> 
#include <cs50.h> 
#include <ctype.h> 
#include <string.h> 
#include <stdlib.h> 

int main(int argc, string argv[]) 
{ 

    if(argc!=2) 
    { 
     printf("One more string \n"); 
    } 
    string key = argv[1]; 
    else if(!isalpha(key)) 
    { 
     printf("Prompt only alphabet letters\n"); 
    } 
    else 
    { 
     string p = GetString(); 

     for (i=0, j=0, n=strlen(p); i<p; i++, j++) 
     { 
      if(j>=stlrlen(p)) 
      { 
       j=0; 
      } 

      if(isupper(p[i])) 
      { 
       printf("%c", ((p[i] +key[j])%26)+'A'); 
      } 

      if(islower(p[i])) 
      { 
       printf("%c", ((p[i] + key[j])%26)+'a'); 
      } 

      if(!isupper(p[i]) && !islower(p[i])) 
      { 
       printf("%c", p[i]); 
      } 
      printf("\n"); 
      return 0; 
     } 
    } 
} 

Что случилось с моим кодом? CS50 Appliance приносит мне 1 ошибкуКод шифрования Vigenere в C

c:15:1 expected expression. 

В моем коде есть смысл? Может кто-нибудь мне помочь? Когда я просто удаляю else, если блок кода, он приносит мне ту же ошибку в else.

+1

Первый 'else' не имеет соответствующего' if'. Вы хотели бы включить 'string key = argv [1];' в один из блоков? – nnn

+3

У вас не может быть кода вне области действия if или else между if-else –

ответ

1

У вас не может быть кода между оператором if и else.

string key = argv[1]; не может быть там

2

Я считаю, что проблема в том, что вы не можете иметь заявление распались в if и else if или if и else

if(argc!=2) 
{ 
    printf("One more string \n"); 
} 
string key = argv[1]; // This is the problem ➞ it cannot sit in the middle of if and else or else if 
else if(!isalpha(key)) 
{ 
    printf("Prompt only alphabet letters\n"); 
} 

Кроме того, вы, вероятно, означает сделать else if и else обычно if заявления, потому что похоже, что вы делаете валидацию

Кроме того, поскольку вы в своем for-loop у вас есть i<p, но p - это строка. Кроме того, так как вы не обновлять n в цикле вы должны инициализировать его вне

int n = strlen(p); 
for (int i=0, j=0; i<n; i++, j++) 

Кроме того, несмотря на декларирование п и присвоение ему strlen(p), можно использовать вызов функции внутри для петли. Нет ничего плохого в этом, просто разумнее будет использовать назначенную вами переменную.