2012-04-21 2 views
0
#include <stdio.h> 

int main() 
{ 
    char _char = 32; 
    int x, p, i, d; 
    scanf("%d ", &x); 
    while(_char == 32) 
     _char = getchar(); 
    x = x%26; 
    printf("The encrypted string is: "); 
    while((_char >= 'a' && _char <= 'z') || (_char >= 'A' && _char <= 'Z')) 
    { 
     if(_char >= 'a' && _char <= 'z') 
      _char = 'a' + (_char + x - 'a')%26; 
     else 
      _char = 'A' + (_char + x - 'A')%26; 
     d = 'a' - 'A'; 
     p = (_char >= 'a') ? _char - d : _char + d; 
     printf("%c", p); 
     scanf("%c", &_char); 
    } 
    return 0; 
} 

Описание кода: программа получает число «x», за которым следуют пробелы, а затем последовательность букв, затем она будет печатать эти буквы (измененные) до первого числа или когда их больше нет письма для получения. Он отлично работает, когда я запускаю его в блоках кода, но когда я использую CMD для вставки входов в виде файла, это дает мне бесконечный цикл, если я ввожу:Бесконечная петля в C

1 FffF 

, когда я добавить 0 или любое число он отлично работает :

1 FffF0 

бесконечный цикл STH как:

Зашифрованный строка: BBBcccDDDeeefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz....

как я могу SLOVE это!?

+0

Небольшой совет: Вместо того, чтобы делать сравнения, как вы делаете в 'while' состоянии проверить для письма, есть удобная функция называемой «isalpha». Также есть функции, чтобы проверить, имеют ли символы нижний или верхний регистр: 'islower' и' isupper'. –

ответ

3

Если больше нет ввода для сканирования,

scanf("%c", &_char); 

не изменяет _char. Вы должны проверить возвращаемое значение сканирования,

if (scanf("%c",&_char) < 1) break; 

для выхода из цикла.

+0

Perfect thnx :) – Rawhi

1

Вы не проверяете возвращаемое значение scanf, чтобы вы не обнаружили, что вход закончился. Scanf возвращает количество совпадающих элементов, которое равно 1 в вашем случае при успешном завершении. Когда конец файла достиг до первого элемента, он возвращает -1.

Таким образом, вы должны break цикла, когда scanf не возвращает 1.

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