Я пытаюсь прочитать строку в массив символов с длиной, выбранной пользователем. Проблема в том, что getchar() не прекращает чтение, пока пользователь не вручную вводит новую строку, нажимая enter, на основе моего кода. Я прочитал другие темы, и я понимаю, почему я не могу это сделать, это просто полностью противоречит моему раздаче раздачи.Строка ввода с getchar
int chPrompt(int nchars);
void strInput(char str[], int nchars);
int main(void) {
int nchars = chPrompt(nchars);
char str[nchars];
strInput(str, nchars);
return 0;
}
int chPrompt(int nchars) {
printf("How many chars do you need to input? >");
return scanf("%i", &nchars);
}
void strInput(char str[], int nchars) {
int i = 0;
while((str[i] = getchar()) != '\n') {
if(i > nchars-1)
break;
i++;
}
str[i] = '\0';
//Troubleshooting
printf("%s %d", str, strlen(str));
}
Это то, что раздаточный материал говорит:
Введите строку с клавиатуры (входит в пространстве) с использованием методы мы говорили о (в то время как с GetChar(), не получает(), fgets() или scanf()), дополнено, чтобы ввести любую сумму до, но не более 80 символов. Убедитесь, что после ввода нулевой точки в нужном месте.
Методом, о котором мы говорили в классе, был цикл while с назначением getchar для массива char.
Мой вопрос: Мой профессор очень категоричен в своих инструкциях. В этом раздаточном материале он специально говорит мне вводить любую сумму до, но не более 80. Это противоречит функциональности getchar, правильно? Есть ли способ ограничить длину строки, используя эту «технику»?
В некоторых из нитей, которые я нашел, люди упомянули, что это зависит от ОС. Итак, если это имеет значение, я нахожусь в Windows 8.1.
'char str [nchars];' → 'char str [nchars + 1];'. Вы пропустили пробел для нулевого символа. То, что вы говорите, это «режим буферизованного ввода». –
@GrzegorzSzpetkowski Взятый уход! Спасибо за напоминание. Есть ли способ обойти буферный режим ввода? Или я неправильно интерпретирую раздаточный материал? – LukeFi
«Это противоречит функциональности getchar, правильно?» - Нет, не правильно. Кажется, у вас есть мусор, связанный с fgets. –