Эта программа выполняет следующие действия:STRCMP - цикл, пока не вход
- сканирует строку текста ввода полукокса [15];
- Сравнивает его с char password [] = "1sure";
- Петли, если строки не совпадают.
- Завершается, если строки совпадают.
Программа пеет, пока строки не совпадают. Тем не менее, я также хочу, чтобы программа зациклилась, если ничего не введено, и пользователь просто нажимает enter. Я попытался использовать функцию isgraph
, но это приводит к сбою программы. Я прокомментировал этот раздел в коде. Может ли кто-нибудь предложить, как заставить программу зацикливаться, если нет ввода?
#include <stdio.h>
#include <string.h>
int main()
{
char password[] = "1sure";
char input[15];
do
{
printf("Password: ");
scanf("%s", input);
if(strcmp(password,input)==0)
{
printf("Password accepted.");
putchar('\n');
return(0);
}
/*else if(isgraph(input)==0)
{
printf("No input detected."); //Program crashes with this segment.
continue;
}*/
else
{
printf("\nInvalid password.\n");
continue;
}
}
while(1);
}
Используйте [ 'fgets()'] (http://en.cppreference.com/w/c/io/fgets) вместо 'scanf' и отбросить новую строку. – WhozCraig
Вызов 'scanf',' scanf ("% s", input); 'не будет завершен до тех пор, пока пользователь не войдет в небелый пробел. Просто нажатие Enter не приведет к тому, что ничего не будет прочитано «input» - программа будет просто ждать. –
Проще включить в выходное сообщение новую строку, когда пароль принят, чем использовать 'printf()' plus 'putchar()'. Не забывайте, что стандартная ошибка предназначена для сообщения сообщений об ошибках. –