C Язык. Принять только алфавиты и разделить два вопроса?
Я хочу, чтобы программа отвечала на имя и фамилию отдельно, а также принимала ввод строго в алфавитном порядке. Где я могу найти больше информации об этом? Благодарю.
#include <stdio.h>
int main(void)
{
char MyFname[20];
char MyLname[20];
printf("Enter your first and last names: \n");
scanf(" %s %s", MyFname, MyLname);
printf("Goodbye %s %s, have a great day!", MyFname, MyLname);
return 0;
}
2 ответа
Решение
Отредактировано, чтобы включить предложения @chux.
Вы можете использовать символьные классы в строке спецификации преобразования.
#include <stdio.h>
int main() {
char alphabetic_string[80], numeric_string[80];
scanf(" %79[a-zA-Z] %79[0-9]", alphabetic_string, numeric_string);
return 0;
}
Чтобы задать два отдельных вопроса, задайте два отдельных вопроса!
#include <stdio.h>
int main() {
char ans1[80], ans2[80];
printf("Input answer to question 1: ");
fflush(NULL);
scanf(" %79[a-zA-Z]", ans1);
printf("Input answer to question 2: ");
fflush(NULL);
scanf(" %79[a-zA-Z]", ans2);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
char buff[1024];
char MyFname[20];
char MyLname[20];
if ( fgets ( buff, sizeof buff, stdin ) != NULL )
{
if ( sscanf ( buff, "%[a-zA-Z] %[a-zA-Z]", MyFname, MyLname ) != 2 )
{
fprintf ( stderr, "Invalid input\n" );
exit ( EXIT_FAILURE );
}
}
printf ( "Goodbye %s have a great day!\nGoodbye %s have a great day!", MyFname,
MyLname );
return 0;
}
Введите ваши имя и фамилию:
Джон Смит
Прощай, Джон, хорошего дня!
Прощай, кузнец, хорошего дня!
Лучше всего использовать fgets для ввода и проверки с помощью sscanf. sscanf успешно вернет общее количество прочитанных входных данных, если введенный формат правильный.
Не забудьте оставить пробел при вводе имени и фамилии, например, Джон Смит