Предположим, что я создал массив символов, скажем, 20 байтов, и предложит использовать для ввода их имени, если их имя не должно превышать 20 символов... Например:
char Name[20];
gets(Name);
Теперь предположим, что его имя - abcdefghijklmnopqrstuvwxyz. Но как только он войдет в abcdefghijklmnopqrst, имя не должно вводить никаких дополнительных данных... Ни один дополнительный вход, предоставленный пользователем, не должен появляться на экране консоли... Только курсор должен мигать, пока он не нажмет войти. Итак, как это сделать?
Операционная система: Windows 7
Компилятор: Visual C++ 2010 Express
В manpage говорится:
Никогда не используйте gets(). Потому что невозможно сказать, не зная заранее данные, сколько символов будет получать(), и потому что gets() будет продолжать хранить символы, находящиеся за концом буфера, крайне опасно использовать. Он используется для защиты компьютерной безопасности. Вместо этого используйте fgets().
Таким образом, вы можете использовать fgets
:
char *fgets(char *s, int size, FILE *stream);
Однако входная последовательность еще не прекращается; однако вы больше не работаете с неопределенными поведением и дырами в области безопасности, если они используются правильно.
Вам лучше использовать объекты C++, такие как std::string
, std::getline
и стандартные iostreams. Они не позволят вам остановить ввод, однако они предотвращают дыры в безопасности при использовании в каноническом режиме.
gets()
не может быть использована правильно. Люди могут умереть, когда вы используете это (вы не найдете улыбки на моем лице, поскольку я не шучу). Невозможно использовать его правильно. Не забывайте об этом, но выкиньте его из панели инструментов.fgets()
можно использовать правильно, но есть много возможностей злоупотреблять им.iostreams
и string
автоматически используются правильно. Используй их.К сожалению, нет встроенного решения для чтения с макс. N символов из ввода без необходимости отбрасывать лишние символы, набранные. Вам придется использовать стороннюю библиотеку или сворачивать свои собственные.
Здесь глупый ответ: если вы хотите, например, чтобы пользователь вводил имя с максимум 20 символами, создайте массив char. size [20] Попросите пользователя ввести размер имени и проверить правильность номера, если его меньше или равно.20, затем перейдите и добавьте имя, чтобы еще раз попросить пользователя ввести размер снова. Вы можете использовать строку вместо символа, но это не гарантирует, что пользователь действительно соблюдает правило размера. Например, пользователь может ввести размер 10, и программа позволит ему ввести имя, но как только он разрешит, если вы используя the.string, он может написать столько, сколько пожелает.
ИЛИ используя массив символов. для имени с 20 или менее символами.
Например, для кода нужен простой цикл. Поскольку мы уже имеем размер, который меньше или равен.20
For (int я = 0; я <20; i++) Cin >> char [i] Затем вы можете назначить символы в строку.
gets
.