2016-10-18 2 views
0

Я пытаюсь напечатать символы данной строки в четных и нечетных положениях с использованием c. Моя программа работает нормально, если есть только одна строка, но она не работает для предложения, содержащего более одной строки. Следующий код только печатает вторую введенную строку, но не печатает символы на четных и нечетных позициях, как это делалось для самой первой строки.символ печати в четном и нечетном положении нескольких строк

int main() 
{ 
char string[10], even[10], odd[10], i, j, k,count; 

i = j = k = count = 0; 

    do 
    { 
    printf("Enter your input string:"); 
    fgets(string, 10, stdin); 
    string[strlen(string) - 1] = '\0'; 

    /* printing the input string */ 
    printf("Given Input string:%s\n", string); 

     while (string[i] != '\0') 
     { 
      if (i % 2 == 0) { 
      odd[j++] = string[i]; 
      } 
      else { 
      even[k++] = string[i]; 
      } 
     i++; 
     } 
    /* terminating even and odd string with NULL */ 
    odd[j] = even[k] = '\0'; 

    /* print the characters at odd position and even positions */ 
    printf(" %s %s", odd,even); 

    odd[0]=even[0]='\0'; 
    count++; 
    }while(count<2); 
return 0; 
} 

При исполнении, когда я вошел в первую строку, как «объединено», то распечатывается «ИМ» для нечетной позиции и «НТДА» для четной позиции. Затем мне предлагается ввести вторую строку, которую я ввел как «состояния», но ничего не распечатано, кроме введенной строки, и программа завершает работу. Он не выводился так же, как для первой строки. Пожалуйста, помогите мне указать на мою ошибку, чтобы мой код работал правильно для любого количества строк, а не только для первой строки. I.e должен выводить символы в четных и нечетных положениях для всех строк, введенных пользователем.

+0

Вы забыли сбросить локальные переменные. –

+0

'i',' j' и 'k' не сбрасываются до 0. – Riley

+0

Да, я осознал свою ошибку сейчас. Я исправил и теперь работает. Большое спасибо! – Angela

ответ

3

Вы ограничиваетесь архаичной версией синтаксиса C, которая требует, чтобы все локальные переменные объявлялись в верхней части блока, перед любыми исполняемыми операциями.

Поскольку ваш код не использует переменные, отличные от count, за пределами цикла do/while, вы должны перемещать свои декларации внутри цикла. Это гарантирует, что переменные имеют соответствующие начальные значения в начале каждой итерации.

Вот несколько дополнительных пунктов, чтобы иметь в виду:

  • Ваш код приведет к непредсказуемому поведению, если конечный пользователь завершает входной поток (Ctrl + Z на Windows, Ctrl + D UNIX) без ввода каких-либо символов
  • Ваш код отбрасывает последний символ, когда конечный пользователь завершает входной поток после ввода менее десяти символов
  • odd[0]=even[0]='\0' не требуется
+0

Спасибо за ваши ценные предложения. – Angela

Смежные вопросы