2012-05-03 16 views
21

Chcę odczytać liczby (typ całkowity) oddzielone spacjami za pomocą funkcji scanf().
Znam następująceJak odczytywać liczby oddzielone spacją za pomocą scanf

C, reading multiple numbers from single input line (scanf?)
how to read scanf with spaces
To mi nie pomagało. Jak mogę odczytać liczby z spacją jako ogranicznikiem. Dla np. Mam następujące numery jako dane wejściowe 2 5 7 4 3 8 18 teraz chcę przechowywać je w różnych zmiennych.
Proszę o pomoc.

+0

[związek] (http://stackoverflow.com/a/3765075/1317740). Czy to pomoże? – Niranjan

+0

To jest do odczytu białych spacji. Chcę odczytać liczby oddzielone białymi spacjami. – Jaguar

+0

Czy jest to ciąg dynamiczny lub stały zestaw liczb? – Niranjan

Odpowiedz

31

myślę o wartości domyślnych czytanych przez scanf z miejsca/wejść. Cóż, możesz podać spację między "% d", jeśli drukujesz liczby całkowite. Również w innych przypadkach.

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

Podobnie, jeśli chcesz przeczytać wartości rozdzielone przecinkami użyć:

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

scanf ignoruje białe spacje z większością dyrektyw '% ', więc generalnie nie potrzebujesz spacji w ciągach twojego formatu.Tak więc dla pierwszego przypadku (liczby całkowite z odstępami białymi), potrzebujesz 'scanf ("% d% d% d ", & var, & var2, &var3);' Dodatkowe przestrzenie w rzeczywistości niczego nie szkodzą (nie mają żadnego efektu), ale w inne przypadki, których nie chcesz, chyba że ich potrzebujesz –

+0

Dlaczego musisz używać tutaj & var1 (czy zmienna var1 int jest typem?)? Czy nie jest to po prostu "etykieta" dla adresu pamięci var1? – YoTengoUnLCD

+0

@YoTengoUnLCD tak Dokładnie, funkcja 'scanf' potrzebuje adresu w celu nadpisania wartości pod tym adresem.To jest prawdziwe dla' ints 'i każdego innego typu, którego możesz użyć z 'scanf' .Nie ma tu nic magicznego, jeśli masz jakieś funkcja, która musi nadpisać wartość, ta funkcja potrzebuje adresu, a nie samej wartości –

3

odczytywać jako %s[^\n]

a następnie odczytać każdy char napisu i zrobić atoi() jeśli jest to char, jeszcze go zignorować.

3

To powinno być tak proste, jak przy użyciu listę otrzymujących zmiennych:

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

+0

co to jest Fp? W powyższym przypadku separatorem jest \ n, chcę użyć spacji jako ogranicznika. – Jaguar

+0

Przepraszamy, usunąłem go, ponieważ nie jest on istotny w tym przykładzie. Nie musisz w żadnym wypadku określać ogranicznika przestrzeni, jest on niejawny w ciągu znaków formatowania. –

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

Czy przyszedłbyś z jakiegoś opisu, nie pomogło? – Bridge

2

scanf używa żadnych spacji jako separatora, więc jeśli tylko powiedzieć scanf("%d", &var) będzie pomijać żadnych spacji, a następnie odczytać liczba całkowita (cyfry do następnej cyfry) i nic więcej.

Należy zauważyć, że białe spacje są dowolnymi spacji - spacje, tabulacje, znaki nowej linii lub znaki powrotu karetki. Każda z nich jest białą spacją i każda z nich będzie służyć do ograniczania kolejnych liczb całkowitych.

-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

jak wspomniano w innych postach, które skanują deliminat e przestrzeni i weź nakłady. –

0

kod C++ ++ w TurboC kompilator:

#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:

Powiązane problemy