Вам нужен набор сканеров, чтобы распознавать все символы, которые вы можете ввести.Вам также нужно проверить возврат от scanf()
, чтобы увидеть, удалось ли это.
#include <stdio.h>
int main()
{
printf("Enter Something: ");
char name[100];
if (scanf("%99[Indhelp ]", name) != 1)
fprintf(stderr, "scanf() failed\n");
else
printf("%s",name);
return 0;
}
Это распознает «Мне нужна помощь» и многие другие фразы.Стандарт C гласит:
Если - символ находится в списке сканирования и не является ни первым, ни вторым, где первый символ является ^, ни последним символом, поведение определяется реализацией.
Во многих реализациях вы можете использовать нотацию, такую как %[a-zA-Z ]
, чтобы подобрать строку букв или пробелов.Однако это поведение, определяемое реализацией.Это означает, что она может делать все, что выберет реализация, но реализация должна документировать, что она означает.
Надежный способ написания набора сканирования:
%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ]
Конечно, это оставляет васс некоторыми проблемами, связанными с пунктуацией, не говоря уже об акцентированных символах;если хотите, вы можете добавить оба в набор сканирования.