Почему программа не выполняет переключение? - PullRequest
0 голосов
/ 31 декабря 2018

Это простой зашифрованный код.Я не очень понимаю, почему оператор switch не будет выполнен.Все до оператора switch работает.Если бы вы могли кратко объяснить, как это исправить, это было бы здорово.Я недавно начал писать код на C, так что извините, если это глупый вопрос!Заранее спасибо!

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

int main()
{

    char letter;    
    char word[100];

    int i;
    int j; 
    int x;

    int shift;
    int stringLength;

    printf("Enter d to DECRYPT.\n");
    printf("Enter e to ENCRYPT.\n");

    scanf("%c", & letter);

    if(letter == 'd' || letter == 'D') // d = 0, e = 1
    {
        x = 0;
    }
    else if(letter == 'e' || letter == 'E')
    {
        x = 1;
    }
    else
    {
        printf("The letter you entered was neither d or e!\n");
        return 0;
    }

    printf("\nEnter the number of shifts:\n");
    scanf("%d", &shift);

    printf("\nEnter the word or phrase you would like to Encrypt or Decrpyt\n");
    scanf("%s", word);
    //printf("\nThe word you entered was:\n%s\n", word);

    stringLength = strlen(word);
    //printf("\nThe size of the string is: %i\n", stringLength);

    switch(x)
    {
        case 0:     // decrypt

            for(i = 0; (i < 100 && word[i] != '\0'); i++)
                word[i] = word[i] - shift;

            break;

            /*
             *    while(i < stringLength)
             *    {
             *        word[i] = word[i] - shift;
             *        i++;
             *        
             *        printf("The Decrypted word is: %s\n", word);
             */
            //break;

        case 1: // encrypt

            for(i = 0; (i < 100 && word[i] != '\0'); i++)
                word[i] = word[i] + shift;

            break;


            /*
             * while( i < stringLength)
             * {
             *    word[i] = word[i] + shift;
             *    i++;
             * 
             *    printf("The Encrypted word is: %s\n", word);
             */
    }

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Ваше switch выполнялось выполнено , но тело каждого case содержало слишком много закомментированных частей.

Используйте fgets вместо scanf для фразыпоскольку scanf получит только первое слово.

Примечание: Я бы использовал #if 0 и #endif вместо /* и */ для комментирования блоков кода.

Обратите внимание, что, хотя вы можете смешивать scanf и fgets, я рекомендовал использовать только fgets и strtol.

Вот очищенный и рабочий код [прошу прощения за чистую стирку]:

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

char word[100];

void
get(void)
{

    fgets(word,sizeof(word),stdin);
    char *cp = strchr(word,'\n');
    if (cp != NULL)
        *cp = 0;

}

int
main()
{

    char letter;

    int i;
    int j;
    int x;

    int shift;
    int stringLength;

    printf("Enter d to DECRYPT.\n");
    printf("Enter e to ENCRYPT.\n");

    get();
    letter = word[0];

    if (letter == 'd' || letter == 'D') // d = 0, e = 1
    {
        x = 0;
    }
    else if (letter == 'e' || letter == 'E') {
        x = 1;
    }
    else {
        printf("The letter you entered was neither d or e!\n");
        return 0;
    }

    printf("\nEnter the number of shifts:\n");
    get();
    shift = strtol(word,NULL,10);

    printf("\nEnter the word or phrase you would like to Encrypt or Decrpyt\n");
#if 0
    scanf("%s", word);
#else
    get();
#endif
    printf("\nThe word you entered was:\n%s\n", word);

    stringLength = strlen(word);
    printf("\nThe size of the string is: %i\n", stringLength);

    printf("x=%d\n", x);
    switch (x) {
    case 0:                         // decrypt
        printf("decrypt case\n");

        for (i = 0; (i < 100 && word[i] != '\0'); i++)
            word[i] = word[i] - shift;

#if 0
        while (i < stringLength) {
            word[i] = word[i] - shift;
            i++;
        }

#endif
        printf("The Decrypted word is: %s\n", word);
        break;

    case 1:                         // encrypt
        printf("encrypt case\n");
        for (i = 0; (i < 100 && word[i] != '\0'); i++)
            word[i] = word[i] + shift;

#if 0
        while (i < stringLength) {
            word[i] = word[i] + shift;
            i++;
        }
#endif

        printf("The Encrypted word is: %s\n", word);
        break;
    }

    return 0;
}
0 голосов
/ 31 декабря 2018

Попробуйте напечатать слово вскоре после выполнения дела.Также, пожалуйста, отформатируйте код.Вот отформатированный код, который работает:

int main() {
  char letter, word[100];
  int i,j, x, shift, stringLength;

  printf("Enter d to DECRYPT or e to ENCRYPT.\n");
  scanf("%c", &letter);

  if(letter == 'd' || letter == 'D') {
    x = 0;
  } else if(letter == 'e' || letter == 'E') {
    x = 1;
  }
  else {
    printf("The letter you entered was neither d or e!\n");
    return 0;
  }

  printf("\nEnter the number of shifts:\n");
  scanf("%d", &shift);

  printf("\nEnter the word or phrase you would like to Encrypt or Decrpyt\n");
  scanf("%s", word);

  stringLength = strlen(word);

  switch(x) {
    case 0:
      for(i = 0; (i < 100 && word[i] != '\0'); i++) {
        word[i] = word[i] - shift;
      }
      printf("The decrypted word is: %s\n", word);
      break;

    case 1: // encrypt
      for(i = 0; (i < 100 && word[i] != '\0'); i++) {
        word[i] = word[i] + shift;
      }
      printf("The encrypted word is: %s\n", word);
      break;

    default:
      printf("Invalid case where the value of x is %d \n",x);
  }

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...