2012-05-03 13 views
21

Scanf() işlevini kullanarak boşluklarla ayrılmış sayıları (tamsayı tipi) okumak istiyorum.
okudumScanf kullanarak boşlukla ayrılmış sayılar nasıl okunur?

C, reading multiple numbers from single input line (scanf?)
how to read scanf with spaces
O bana çok yardımcı olmuyor şu. Sınırlayıcı olarak boşluklarla sayıları nasıl okuyabilirim. Örneğin Şu numaraları 2 5 7 4 3 8 18 girdisi olarak takip ediyorum, şimdi bunları farklı değişkenlerde saklamak istiyorum.
Lütfen yardım edin.

+0

[bağlantı] (http://stackoverflow.com/a/3765075/1317740). Bu yardım edecek mi? – Niranjan

+0

Bu beyaz boşlukları okumak içindir. Beyaz boşluklarla ayrılmış sayıları okumak istiyorum. – Jaguar

+0

Dinamik olarak dizilmiş bir dizi mi, yoksa sabit bir sayı kümesi mi? – Niranjan

cevap

31

ben alanı ile scanf tarafından okunan varsayılan değerlere göre düşünmek/girin. Tamsayıları yazdırıyorsanız, '% d' arasında boşluk bırakabilirsiniz. Diğer durumlar için de aynı. Okumak istediğiniz takdirde

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

Benzer virgülle ayrılmış değerler kullanın: Eğer sadece herhangi bir boşluk atlar ve sonra okuyacak scanf("%d", &var) söylemek eğer öyleyse

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

scanf, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dir komutlarla boşlukları yoksayar, bu nedenle genellikle biçim dizilerinizde boşluk istemezsiniz.Yani ilk durum için (boşluk sınırlanmış tamsayılar), scanf ("% d% d% d", & var, & var2, &var3); "İstediğiniz fazladan boşluklar, aslında burada hiçbir şeye zarar vermez (hiçbir etkisi olmaz), ancak diğer durumlarda ihtiyacınız olmadıkça onları istemezsiniz –

+0

Neden & var1 burada kullanmalısınız (var1 bir int tür değişkeni?)? Bu var1'in bellek adresi için bir 'etiket' değil mi? – YoTengoUnLCD

+0

@YoTengoUnLCD evet Tam olarak "scanf" işlevi, bu adreste değerin üzerine yazmak için adrese ihtiyaç duyar. Bu, "ints" ve "scanf" ile kullanabileceğiniz başka bir tür için geçerlidir. bir değerin üzerine yazması gereken fonksiyon, değerin kendisinin değil, adresin ihtiyacı vardır. –

3

oku

%s[^\n] olarak ve daha sonra başka bunu görmezden, dize her char okumak ve bir char ise bir atoi() yok.

3

Kabul eden değişkenlerin listesini kullanmak kadar basit olmalıdır:

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

+0

burada ne var? Yukarıdaki durumda, sınırlayıcı \ n, alanı sınırlayıcı olarak kullanmak istiyorum. – Jaguar

+0

Üzgünüm, bu örnekte uygun olmadığı için kaldırdım. Alan sınırlayıcıyı bir yerde belirtmeniz gerekmez, biçim dizginizde örtülüdür. –

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

Açıklama türden bir açıklama gelmez mi? – Bridge

2

scanf, sınırlayıcı olarak herhangi boşluk kullanır bir tam sayı (bir sonraki haneye kadar rakamlar) ve başka bir şey değil.

Boşlukların herhangi bir boşluk olduğunu unutmayın - boşluklar, sekmeler, satırsonları veya satırbaşı iadeleri. Bunlardan herhangi biri beyaz boşluktur ve bunlardan herhangi biri veya birkaçı ardışık tam sayıları sınırlamaya hizmet eder.

-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 gibi diğer mesajlarda belirtildiği gibi deliminat boşluk ve girişleri alın. –

0

C++ kod TurboC içinde ++ Derleyici:

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

İlgili konular