C — Элемент fgets в новой переменной

#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);
}