Вопрос по c – Как читать числа, разделенные пробелом, используя scanf

25

Я хочу читать числа (целочисленный тип), разделенные пробелами, используя функцию scanf ().
Я прочитал следующее

C, чтение нескольких чисел из одной строки ввода (scanf?)
как читать сканф с пробелами
Это не очень мне помогает. Как я могу читать числа с пробелом в качестве разделителя. Например, У меня есть следующие цифры в качестве ввода2 5 7 4 3 8 18 теперь я хочу хранить их в разных переменных.
Пожалуйста помоги.

link , Это поможет? Niranjan
Это для фиксированного набора чисел. Jainendra
Тогда зачем возиться со всем беспорядочным кодом. Следуй этомуAnswer  , Это то, что вы хотите. Это не работает для вас? Niranjan
Это для строки динамической длины или фиксированного набора чисел? Niranjan
Это для чтения пробелов. Я хочу читать числа, разделенные пробелами. Jainendra

Ваш Ответ

6   ответов
2

scanf использует любой пробел в качестве разделителя, так что если вы просто скажетеscanf("%d", &var) он пропустит любой пробел, а затем прочитает целое число (цифры до следующего нецифрового числа) и ничего более.

Обратите внимание, что пробел - это любой пробел - пробел, табуляция, перевод строки или возврат каретки. Любой из них является пробелом, и любой один или несколько из них будут служить для разделения последовательных целых чисел.

2

int main()
{
char string[200];
int g,a,i,G[20],A[20],met;

gets(string);
g=convert_input(G,string);

for(i=0;i<=g;i++)
    printf("\n%d>>%d",i,G[i]);
return 0;
}

int convert_input(int K[],char string[200])
{
int j=0,i=0,temp=0;
while(string[i]!='\0')
{
    temp=0;
    while(string[i]!=' ' && string[i]!='\0')
        temp=temp*10 + (string[i++]-'0') ;
    if(string[i]==' ')
        i++;
    K[j++]=temp;
}
return j-1;
}
Придет ли такое описание не помочь?
3

как использование списка принимающих переменных:

scanf("%i %i %i", &var1, &var2, &var3);

что такое фп здесь? В приведенном выше случае разделителем является \ n, я хочу использовать пробел в качестве разделителя. Jainendra
Извините, я удалил его, так как в данном примере это не уместно. Вам не нужно где-то указывать разделитель пробела, это подразумевается в вашей строке формата.
32

что по умолчанию значения читаются scanf с пробелом / вводом. Ну, вы можете предоставить пространство между "% d". если вы печатаете целые числа. Также и для других случаев.

scanf("%d %d %d", &var1, &var2, &var3);

Аналогично, если вы хотите прочитать значения, разделенные запятыми, используйте:

scanf("%d,%d,%d", &var1, &var2, &var3);
Что делать, если вы читаете текстовый файл через запятую?
Scanf игнорирует пробелы с большинством% директивами, поэтому вам обычно не нужны пробелы в строках формата. Таким образом, для первого случая (целые числа, разделенные пробелами), вы хотитеscanf("%d%d%d", &var, &var2, &var3);  Лишние пробелы здесь на самом деле ничего не травмируют (они не действуют), но в других случаях вы не хотите их, если они вам не нужны.
@YoTengoUnLCD да точно.scanf Функция нуждается в адресе, чтобы перезаписать значение по этому адресу. Это верно дляints и любой другой тип, который вы можете использовать сscanf, Здесь не происходит ничего волшебного, если у вас есть какая-либо функция, которой нужно перезаписать значение, этой функции нужен адрес, а не само значение.
Почему вы должны использовать & amp1 var1 (переменная типа int1?)? Разве это не просто ярлык? для адреса памяти var1?
3

%s[^\n]

а затем прочитать каждыйchar из строки, и сделатьatoi() если этоchar иначе проигнорируй это.

Похожие вопросы