#c #stdin #fgets
#c #stdin #fgets
Вопрос:
Я новичок в языке C, и я пытаюсь прочитать ввод от пользователя в терминале (stdin).Я хочу, чтобы пользователь мог вводить столько чисел или символов, сколько захочет, пока не нажмет ENTER.
Я хочу сохранить второе значение в переменной Int.
Например, пользователь вводит: 45 34 RE 34
Я пытаюсь использовать
fgets(input,1024,stdin)
что дает мне массив символов, сохраненных во входных данных, но мне нужно число после первого пробела, поэтому 3 и число после него, 4 в новой переменной.
Я знаю, что это кажется довольно простым, но у меня возникают некоторые трудности с этим, есть ли простой код для этого?
Большое вам спасибо!
Комментарии:
1. ДА,
if(sscanf(input, "%*s%d", amp;number) == 1) { ... }
2. @WeatherVane на правильном пути, но при использовании подобного scanf будет сохраняться
34
в number, а не3
в одной переменной и4
в другой. (Если во входных данных нет пробела, который я не вижу.)3. @WilliamPursell Я понимаю, что OP «Мне нужно число после первого пробела, поэтому 3 и число после него, 4 в новой переменной» , чтобы сказать, что каждая цифра в поле два должна быть извлечена и помещена в одну новую переменную.
Ответ №1:
Если у вас уже есть данные в буфере с именем ‘input’, их довольно легко проанализировать, как вы описываете:
#include <stdio.h>
#include <string.h>
int
main(void)
{
char input[] = "45 34 RE 34";
int three = 0;
int four = 0;
char *space;
space = strchr(input, ' ');
three = space[1] - '0';
four = space[2] - '0';
printf("%d:%dn", three, four);
return 0;
}
Обратите внимание, что вы могли бы использовать scanf
для получения значений, но scanf
это ужасный инструмент для новичка, и вам было бы лучше поиграть с подобными решениями, чтобы понять, что происходит.
Если вы не управляете вводом, вам нужно будет добавить проверку границ и убедиться, что strchr
найдено значение.
Ответ №2:
Мне нужно число после первого пробела, поэтому 3 и число после него, 4 в новой переменной . …. есть простой код для этого?
Анализируйте с sscanf()
помощью и используйте ограничения ширины
int number1, number2;
// vvvvv Scan non-space characters and discard
// vvv Scan 1 digit int
if (sscanf(input, "%*[^ ]", amp;number1, amp;number2) == 2) {
printf("Success %d %dn, number1, number2);
}
Более надежный подход (приведенный выше сбой, когда первый символ является пробелом).
char *space = strchr(input, ' ');
if (space amp;amp; sscanf(space, "", amp;number1, amp;number2) == 2) {
printf("Success %d %dn, number1, number2);
}