Для моего назначения практики мне нужно использовать либо gets(), либо fgets(). Я выбрал fgets() как более безопасный.fgets() Не игнорирует новую строку
Первый вход предназначен для хранения максимум 5 символов. Итак, я дал массив символов размером 6 для размещения конечного «\ 0».
Я нашел fgets() вопрос об этом добавив завершающую «\ п» при нажатии Enter (с помощью стандартного ввода с fgets())
Я сделал несколько исследований, и нашел цикл, чтобы попытаться избавиться от этого. Тем не менее, он, похоже, не работает, и я не могу, чтобы жизнь меня определяла, почему.
Его все еще пропускают следующий вход, когда я печатаю 5 символов.
Вот код:
#include <stdio.h>
#include <string.h>
int main(void)
{
//Declare char arrays
char arcInputString5[6];
char arcInputString10[11];
char arcInputString15[16];
char arcInputString20[21];
int clean1, clean2, clean3, clean4;
// int nStrLen1, nStrLen2, nStrLen3, nStrLen4;
// nStrLen1 = nStrLen2 = nStrLen3 = nStrLen4 = 0;
printf("\nPlease Input String 1 - Max Length 5: ");
//gets(arcInputString5);
fgets(arcInputString5, 6, stdin);
for(clean1 = 0; clean1 < strlen(arcInputString5); clean1++)
{
if(arcInputString5[clean1] == '\n' || arcInputString5[clean1] == '\r')
{
arcInputString5[clean1] = '\0';
break;
}
}
printf("\nPlease Input String 2 - Max Length 10: ");
//gets(arcInputString10);
fgets(arcInputString10, 10, stdin);
printf("\nPlease Input String 3 - Max Length 15: ");
//gets(arcInputString15);
fgets(arcInputString15, 15, stdin);
printf("\nPlease Input String 4 - Max Length 20: ");
//gets(arcInputString20);
fgets(arcInputString20, 20, stdin);
printf("\nThankyou For Your Inputs - They Are Shown Back To You Below\n");
puts(arcInputString5);
puts(arcInputString10);
puts(arcInputString15);
puts(arcInputString20);
printf("\nThe String Lengths For Each Input Are Listed Below");
printf("\n%d", strlen(arcInputString5));
printf("\n%d", strlen(arcInputString10));
printf("\n%d", strlen(arcInputString15));
printf("\n%d", strlen(arcInputString20));
}
Ive пытался несколько способов сделать для цикла, например, используя число 6 вместо "STRLEN (arcInputString5)"
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ:
Пример входных данных:
asd d
ПРИМЕР ВЫХОД:
Please Input String 2 - Max Length 10: //skips this
Please Input String 3 - Max Length 15: //this is the next line for input
Пожалуйста, укажите точный ввод и вывод программы. –
Не столько «добавление новой строки», как «не удаление новой строки». Клавиша Enter предоставляет новую строку; функция 'gets()' удаляет это из возвращаемой строки, но 'fgets()' does not - это, по крайней мере, дает вам возможность определить, была ли у вас полная строка или была ли урезана линия ввода из-за нехватки места , –
Как правило, не ограничивайте ввод только 5 символами; разрешить (ради аргумента) 256 символов ввода, а затем проверить, что пользователь не вводил более 5 символов (кроме новой строки). Это в значительной степени устраняет проблемы, связанные с необходимостью очистки дополнительных данных от длинных строк. Фактически, я бы использовал 4096 в качестве длины по умолчанию для ввода (а не только 256), но выберем любое достаточно большое значение, которое вряд ли вызовет проблемы. –