2012-05-03 3 views
21

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

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

+0

[ссылка] (http://stackoverflow.com/a/3765075/1317740). Это поможет? – Niranjan

+0

То есть для чтения пробелов. Я хочу читать числа, разделенные пробелами. – Jaguar

+0

Является ли это для строки с динамической длиной или фиксированным набором чисел? – Niranjan

ответ

31

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

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

Точно так же, если вы хотите прочитать значения, разделенные запятыми использовать:

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

scanf игнорирует пробелы с большинством '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '''Итак, для первого случая (целые числа с разделителями пробелов) вы хотите 'scanf («% d% d% d », & var, & var2, &var3);' Дополнительные места на самом деле ничего не навредят здесь (они не имеют никакого эффекта), но в в других случаях вы не хотите их, если они вам не нужны. –

+0

Почему вы должны использовать & var1 здесь (является переменной var1 переменной типа int?)? Разве это не просто «метка» для адреса памяти var1? – YoTengoUnLCD

+0

@YoTengoUnLCD да Именно функция 'scanf' нуждается в адресе, чтобы переписать значение по этому адресу. Это справедливо для' ints' и любого другого типа, который вы можете использовать с 'scanf'. Здесь нет ничего волшебного, если у вас есть функция, которая должна переписывать значение, эта функция нуждается в адресе, а не самом значении –

3

прочитанной в %s[^\n]

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

3

Это должно быть так же просто, как с использованием списка принимающих переменными:

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

+0

Что здесь fp? В приведенном выше случае разделитель равен \ n, я хочу использовать пробел как разделитель. – Jaguar

+0

Извините, я удалил его, поскольку в этом примере он не уместен. Вам не нужно указывать разделитель пространства где-то, он неяв в вашей строке форматирования. –

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; 
} 
+1

Пришло ли описание не помогло? – Bridge

2

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

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

-1
int main(){ 
    int A[1000]; 
    char *tok = NULL; 
    char *savePtr = NULL; 
    char str[1000] = ""; 
    int totalElement=0; 
    printf("Enter space seperated string\n"); 
    scanf("%[^\n]s", str); 
    savePtr = str; 

    while((tok=strtok_r(savePtr, " ", &savePtr))){ 
     A[totalElement++] = atoi(tok); 
    } 

    for(int i = 0; i < totalElement; i++) 
     printf("%d ", A[i]); 
} 
-1
+0

как упоминалось в других сообщениях, что scanf deliminat e пробел и принять входные данные. –

0

C++ код в TurboC++ Компилятор:

#include<iostream.h> 
#include<stdlib.h> 
#include<string.h> 
#include<conio.h> 
void main() 
{ 
    int l=0,i=0; 
    char *a,*t; 
    clrscr(); 
    int n; 
    cout<<"\nEnter a string: "; 
    cin>>t; 
    a=strdup(t); //duplicate 
    while(strlen(a)){ 
     a = strtok(a, ","); //gives string upto where ',' is found 
     n=atoi(a); 
     l+=strlen(a); //we save the length 
     cout<<"n= "<<n<<" a= "<<a<<" "<<strlen(a)<<endl; //simple output 
     a=strdup(t+l+i); //updating the same pointer with rest part 
     i++; //counting number of ','s 
    } 
    getch(); 
} 

Output looks like:

Смежные вопросы