2013-08-23 6 views
13

scanf() का उपयोग करते समय सी में एम्परसैंड का उपयोग करने के नियम क्या हैं?मुझे स्कैनफ़ के साथ एम्पर्सेंड का उपयोग कब करना चाहिए()

struct Student 
{ 
    char name[20]; 
    int id; 
}; 

void main() 
{ 
    struct Student std1; 
    printf("enter name and id of std1\n"); 
    scanf("%s %d", std1.name, &(std1.id)); 
} 

स्ट्रिंग के लिए मैं क्यों एम्परसेंड उपयोग करने की आवश्यकता नहीं है और int के लिए मैं इसे उपयोग करने के लिए है?

क्या एम्परसैंड साइन का उपयोग करने पर कोई नियम है?

+1

पढ़ें [सी तार पर एक ट्यूटोरियल] (http://www.codingunit.com/c-tutorial-strings-and-string-library-functions) – Dariusz

+2

@PP में थोड़ा कृपालु ध्वनि हो सकता है उनकी टिप्पणी लेकिन वह बिल्कुल सही है: पहले एक अच्छी सी प्रोग्रामिंग पुस्तक पढ़ें। केर्निगन और रिची की _ सी सी प्रोग्रामिंग भाषा_ एक उत्कृष्ट संसाधन है। – SolarBear

+2

@ पीपी बिल्कुल सही है। आप तब तक सी लिखना शुरू नहीं कर सकते जब तक आप समझते हैं कि एक चर के लिए क्यों और आवश्यकता नहीं है, न कि दूसरे। यह थ्रॉटल और ब्रेक के बीच अंतर जानने के बिना कार चलाने की कोशिश करना है। –

उत्तर

21

scanf पतों जो और इतने तर्क पर दूसरा, तृतीय, fouth के रूप में पारित कर रहे हैं में डेटा की विशेष प्रकार पढ़ता है ...

int var; 
यहाँ

वर मूल्य और & वर पता

scanf("%d",&var); 
है

उपर्युक्त कथन का कहना है ==> & var पता

में डेटा डी (पूर्णांक) प्रकार का डेटा पढ़ें
char s[20]; 

यहां पते का मूल्य नहीं है। क्योंकि यहां एक चार्टर सरणी है (हमें स्ट्रिंग के रूप में कहा जाता है)

सरणी नाम स्वयं ही इसका पता इंगित करता है। एस == & एस [0], ये दोनों समान हैं।

scanf("%s",s); 

उपरोक्त कथन का कहना है ==> पढ़% s पता स्थान रों से शुरू में (वर्णों के सरणी) डेटा के प्रकार के।


int a[20]; 

कृपया देखें इस कोड

#include<stdio.h> 
#define MAX 5 

    main() 
    { 
     int a[MAX]; 
     int i; 
     printf("Enter Values of array\n"); 
     for(i=0;i<MAX;i++) 
     { 
       printf("Enter a[%d] = ",i); 
       scanf("%d",&a[i]); // reading each time single integer value starting index with 0 and ending index MAX-1. 
     } 

    } 

सी में हम साथ समय में पात्रों में से स्कैनिंग समूह की तरह के रूप में एक समय में पूर्णांकों का समूह स्कैन करने के लिए किसी एक फॉर्मेट स्पेसिफायर नहीं था % s की मदद

और यहां एक = & एक [0];

आप एकल पूर्णांक मान को उस पते पर सीधे स्कैन कर सकते हैं जो एक द्वारा इंगित किया गया है।

scanf("%d",a); 

printf("a[0]=%d\n",a[0]); 

यदि आप 10 दर्ज करते हैं तो यह एक [0] = 10 प्रिंट करता है।

प्वाइंटर के उपयोग:

यदि आप संकेत के रूप में नीचे दिखाया गया है का उपयोग करें, तो आप को पता चल जाएगा। पॉइंटर को कैसे बढ़ाएं और मूल्यों को सरणी के विभिन्न स्थानों में कैसे प्राप्त करें।

आप तीर पढ़ने के लिए सूचक स्थान स्थानांतरित कर सकते हैं। आप बाहर चलने वाले पॉइंटर स्थान के साथ सरणी पढ़ सकते हैं।

बाहर जाने सूचक स्थानों

#include<stdio.h> 
#define MAX 5 

    main() 
    { 
     int a[MAX]; 
     int i; 
     int *ptr; 
     ptr = &a[0]; 
     printf("Enter Values of array\n"); 
      for(i=0;i<MAX;i++) 
       { 
       printf("Enter a[%d] = ",i); 
       scanf("%d",ptr+i); //we are not moving ptr position we scaning each time into next location by incrementing i 
       } 

    } 

जब वृद्धि की जाती सूचक तो वेतन वृद्धि सूचक के प्रकार पर निर्भर करता है के साथ सूचक स्थानों

#include<stdio.h> 
    #define MAX 5 

     main() 
     { 
      int a[MAX]; 
      int i; 
      int *ptr; 
      ptr = &a[0]; 
      printf("Enter Values of array\n"); 
       for(i=0;i<MAX;i++) 
        { 
        printf("Enter a[%d] = ",i); 
        scanf("%d",ptr); 
        ptr++; //moving pointer 
        } 

     } 

2.reading सरणियों ले जाकर 1.reading सरणियों। यहां पीटीआर पूर्णांक सूचक है इसलिए पीआरटी + 1 पीआरटी + आकार (int) स्थानों में वृद्धि करेगा।


int a[5][5]; 

इस दो आयामी सरणी ताकि आप 5 संकेत यहाँ की आवश्यकता होती है तो मैं घोषित किया गया था सूचक सरणी स्कैन करने के लिए है।

#include<stdio.h> 
#define MAX 5 

    main() 
    { 
    int a[MAX][MAX],i,j; 
    int *pointer[MAX]; 

    for(i=0;i<MAX;i++) 
    pointer[i]=&a[i][0]; //initializes the pointers 

    printf("Enter elements :\n"); 
    for(i=0;i< MAX;i++) 
     { 
     for(j=0;j<MAX;j++) 
      { 

      printf("Enter the a[%d][%d] element: ",i,j); 
      scanf("%d",pointer[i]+j); //each time you will move like 00 01 02 03 04 and second time 10 11 12 13 14 and so on... 
      //printf("%u or %x",pointer[i]+j,pointer[i]+j);//un comment this line and see the addresses how the address incrementing for each element 
      } 
     } 

    printf("The Given Matrix:\n\n"); 
    for(i=0;i<MAX;i++) 
       { 
       for(j=0;j<MAX;j++) 
         { 
         printf("%d",*(pointer[i]+j)); 
         printf("\t\t"); 
      } 
     printf("\n\n"); 
       } 

    } 

प्रत्यक्ष scaning

printf("Enter elements :\n"); 
    for(i=0;i< MAX;i++) 
     { 
     for(j=0;j<MAX;j++) 
      { 

      printf("Enter the a[%d][%d] element: ",i,j); 
      scanf("%d",&a[i][j]); //we can't do like this a++ or ++a or a+i this is illegal in C. for that purpose we are using pointers 
      } 
     } 

आप नीचे दिए गए पुस्तक में ऊपर सामान के सबसे पाया होगा।

please goto this link : read the wiki and read
The C Programming Language (Second edition) - Brian W. Kernighan and Dennis M. Ritchie

+1

धन्यवाद, लेकिन जब मैं ऐसा कुछ करने की कोशिश कर रहा हूं: int arr [4] [5]; – Dkova

+0

@ डोकोवा ने उत्तर संपादित किया। आपको जो चाहिए वह आपको मिलेगा। – Gangadhar

+1

धन्यवाद! @ गंगाधर – Dkova

0

सी में, तार वर्णों के सरणी हैं (\0 वर्ण के साथ समाप्त)।

ऐरे नाम एक सरणी के पहले तत्व (स्मृति स्थान जहां सरणी संग्रहीत है) का सूचक देता है, और स्केलर वैरिएबल का नाम स्केलर का मान देता है, इसलिए आपको स्मृति स्थान प्राप्त करने के लिए & ऑपरेटर का उपयोग करने की आवश्यकता है स्केलर जिसमें आपको मूल्य लिखने की आवश्यकता है।

+0

मैं सहमत हूं, मैं इसे प्रतिबिंबित करने के लिए अपना उत्तर बदल दूंगा। –

5

क्योंकि सी स्ट्रिंग्स का प्रकार char [] है। सरणी नाम यह पता का मान है, परंतु वह int चर, आप &

उपयोग करने के लिए की जरूरत नहीं है और यह void main लिखने के लिए गलत है, तो आप हमेशा int main उपयोग करना चाहिए।

संबंधित मुद्दे