2013-10-15 2 views
0

Я хочу создать программу, которая обрабатывает ввод пользователя, а точнее типизированные косые черты («/»). Я использовал переменную, чтобы считать их. Проблема в том, что она говорит «ошибка». каждый раз, когда я делаю правильный ввод, в этом случае 2 слэша (//).Обработка ввода с использованием while в c

ЭТО РАБОТАЕТ

Вставьте строку: //

ок.

ЭТО НЕ РАБОТАЕТ

Вставьте строку: ///

ошибку.

Вставить строку: //

ошибка. - должно быть «хорошо». Почему он говорит об ошибке?

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

char input[50]; 
int slash_count = 0; 
int i; 
printf("Insert a string: "); 
scanf("%s", input); 
for(i=0; i<strlen(input); i++) 
{ 
    if (input[i] == '/') 
    { 
     slash_count++; 
    } 
} 
while (slash_count != 2) 
{ 
    printf("error.\n"); 
    printf("Insert a string: "); 
    scanf("%s", input); 
} 
printf("ok"); 

ответ

0

Цикл в то время как следует случаю по всей

вход -> проверить -> проверить процедуру.

Однако, у вас есть время цикла для повторного суда

после проверки.

Так что, если вы получили 3 до,

и вы получите вновь попробовать,

тогда ваш slash_count никогда не обновляется.

int slash_count = 0; 

while (slash_count != 2) { 
    slash_count = 0; 
    char input[50]; 
    printf("Insert a string: ") 
    scanf("%s", input) 
    for (int i = 0; i < strlen(input); i++) { 
     if (input[i] == '/') { 
      slash_count++; 
      if (slash_count > 2) break; 
     } 
    } 
} 
printf("okay"); 
+0

Так что в принципе я должен поместить цикл for в цикл while. – user2729661

+0

вы должны поместить все в цикл while. –

+0

Идея состоит в том, что вся ваша процедура (get input -> validate) должна выполняться каждый раз, когда вход недействителен. Однако, поскольку вы только переустанавливаете фазу ввода, slash_count никогда не будет обновляться, и он никогда не будет проверен. –

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