2016-12-06 1 views
-1
while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n') { 

      break; 
     } 
     else { 

      continue; 
     } 

     palindrome->push_back(palindrome, ch); 


    } 

    if (is_palindrome(palindrome)) { 

     printf("Yes \n"); 

    } 
    else { 
     printf("No \n"); 
    } 


    palindrome->destroy(&palindrome); 



} 

return 0; 
} 

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

+0

Я не понимаю, почему ты нужно сделать что-нибудь особенное в отношении управления 'stdin'. (Ваша проблема, похоже, не имеет к этому отношения.) –

+0

Есть ли причина, по которой вы не можете использовать 'scanf'? (т. е. читать «строку» из консоли ('stdin') один раз вместо чтения строки' char') – ryyker

ответ

1

Вы никогда не достигаете palindrome->push_back(palindrome, ch); (потому что либо перерыв, либо переход к следующей итерации).

Используйте это:

while (1) { 
    ch = getc(stdin); 
    if (ch == '\n') { 
     break; 
    } 
    // otherwise: 
    palindrome->push_back(palindrome, ch); 
} 

Update. Насколько я понимаю, что вам нужно, вы можете сделать это (при условии, что каждая строка, даже последняя, ​​заканчивается \n, так как это должно быть в UNIX):

while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n' || ch == EOF) { 
      break; 
     } 
     palindrome->push_back(palindrome, ch); 
    } 

    if (ch != EOF) { 
     if (is_palindrome(palindrome)) { 
      printf("Yes \n"); 
     } 
     else { 
      printf("No \n"); 
     } 
    } 

    palindrome->destroy(&palindrome); 

    if (ch == EOF) { 
     break; 
    } 
} 

return 0; 
} 
+0

да, это был мой первоначальный код (и он работает), и то, что я показал выше, является неудачной попыткой сделать это работают не более чем на одной строке текста. который работает только для одной строки. и затем он заканчивает программу. –

+0

@Byte_Spike, я тебе не верю. Внешний цикл кода, который вы видите выше, бесконечен. Модификация, поскольку этот ответ подсказывает, не изменит это. –

+0

каждый линия отдельно. в основном, если я вставляю 4 строки с \ n в конце каждого. он запускает каждую строку и выводит результат после каждой строки. Я сделал что-то похожее на Case, а не на петлях, и было проще, но на этот раз у меня нет роскоши использовать Case. также. снова я сделал это работать для одной строки, и это совсем не сложно, если бы я не смог узнать, работает ли код палиндрома или нет. , чтобы получить то, что вы показали, очень просто по сравнению с структурой данных задней части и программой палиндрома, которую я должен был написать. это не действительно исследование. –