I have this error. Please Help

~/workspace/pset2/ $ make vigenere
clang -fsanitize=signed-integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wshadow    vigenere.c  -lcrypt -lcs50 -lm -o vigenere
vigenere.c:38:4: error: expected expression
1 error generated.
make: *** [vigenere] Error 1

My code below

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

int main(int argc,string argv[])
  if (argc == 2)
   int k[strlen(argv[1])];
   for(int a = 0, b = strlen(argv[1]); a < b; a++)
     k[a] = argv[1][a] - (int)"a";
     k[a] = argv[1][a] - (int)"A";
 printf("plaintext: ");
 string p = get_string();
 printf("ciphertext: ");
 for (int i = 0, n = strlen(p); i < n; i++)
  if (isalpha((char)p[i]))
      printf("%c", (char)(p[i] + k[i % strlen(argv[1])] - 65) % 26 + 65);
    else if(islower((char)p[i]))
      printf("%c", (char)(p[i] + k[i % strlen(argv[1])] - 97) % 26 + 97);
 return 0;
  return 1;
  • How have you declared argv?
    – curiouskiwi
    Dec 11 '17 at 23:11
  • I did the int main(int argc, string argv[]), Is that what you mean? Dec 11 '17 at 23:34
  • can you edit your question and post the entire code up to that point in the program? (so, the first 16 lines or so). No need for anything after that.
    – curiouskiwi
    Dec 11 '17 at 23:35
  • I just did. Please reload Dec 11 '17 at 23:38

atoi takes a string as argument. You are passing it a single char.

As an example, if you have atoi("123"); you'll get 123. But you can't pass it atoi('1') as that is a char.

If you are trying to get the ascii value of each char in the keyword, you can subtract either 'A' or 'a' from the char, such that if argv[1][a] was 'c', then 'c' - 'a' is 2. I think this is what you are trying to do?


You have to subtract either 'a' or 'A' depending on the value of argv[1][a] right? You are trying to get the char down to the range of 0-25 and that will only work if you know if it's upper or lowercase. (I see that you are using magic numbers 97 and 65 later on. Do you know why?)

Also, what happens if the plaintext char isn't alpha? You shouldn't be incrementing the key, but you are because you are using i as the increment value. You should create a new variable to keep track of which key value you need to be using.

  • can you please reload? Dec 12 '17 at 0:28
  • edited my answer
    – curiouskiwi
    Dec 12 '17 at 0:31
  • I updated it again... Dec 12 '17 at 0:50
  • your code no longer matches your error. why are you trying to access p before you have even declared it? why are you no longer looping over argv[1]
    – curiouskiwi
    Dec 12 '17 at 0:52
  • I'd suggest you close off this question and work on testing your code. Then, if you get stuck again, open a new question. SE doesn't work well to debug someone's code step by step.
    – curiouskiwi
    Dec 12 '17 at 0:54

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .