2011-11-30 10 views
41

मेरे पास एक प्रोग्राम है जहां मैं एक प्रविष्टि स्ट्रिंग के मामले को उलटा करता हूं। यह मेरी .cpp फ़ाइल में कोड है और मैं विजुअल स्टूडियो सी ++ आईडीई का उपयोग कर रहा हूं। मुझे यकीन नहीं है कि मुझे हेडर फ़ाइल में क्या चाहिए या यदि मुझे यह काम करने के लिए एक की आवश्यकता है।पहचानकर्ता को फ़ंक्शन कॉल पर त्रुटि नहीं मिली

मेरे फ़ंक्शन कॉल स्वैपकेस में त्रुटि। मुख्य कारण किसी कारण से स्वैपकेस नहीं देखता है जिसे मैं निश्चित नहीं करता हूं।

#include <cctype> 
#include <iostream> 
#include <conio.h> 

using namespace std; 

int main() 
{ 
    char name[30]; 
    cout<<"Enter a name: "; 
    cin.getline(name, 30); 
    swapCase(name); 
    cout<<"Changed case is: "<< name <<endl; 
    _getch(); 
    return 0; 
} 

void swapCase (char* name) 
{ 
    for(int i=0;name[i];i++) 
    { 
     if (name[i] >= 'A' && name[i] <= 'Z') 
      name[i] += 32; //changing upper to lower 
     else if(name[i] >= 'a' && name[i] <= 'z') 
      name[i] -= 32; //changing lower to upper 
    } 
} 

वाक्यविन्यास या अर्थशास्त्र के लिए कोई अन्य सुझाव की सराहना की जाती है।

+1

उपयोगकर्ता इनपुट के लिए एक निश्चित आकार सरणी का उपयोग करना बहुत खतरनाक है - अगर मैं 40 वर्ण दर्ज करता हूं तो प्रोग्राम क्रैश हो सकता है, या इससे भी बदतर हो सकता है। आपको 'name'' std :: string' बनाना चाहिए, और इसे 'getline (cin, name)' के रूप में पढ़ें। –

उत्तर

62

मुख्य कार्य से पहले इस लाइन जोड़ें:

void swapCase (char* name); 

int main() 
{ 
    ... 
    swapCase(name); // swapCase prototype should be known at this point 
    ... 
} 

इस घोषणा आगे कहा जाता है: संकलक समारोह प्रोटोटाइप पता करने के लिए जब समारोह कॉल संकलित किया गया है की जरूरत है।

+9

या बस 'मुख्य' से पहले 'स्वैपकेस' के निर्धारण को स्थानांतरित करें। –

+1

आह, यह काम करता है। सी भाषा का उपयोग करने के बाद से कुछ समय हो गया है। : डी बहुत बहुत धन्यवाद। – KRB

+0

बेशक, मुख्य से पहले पूरे स्वैपकेस फ़ंक्शन को ले जाना काम करेगा। –

0

आपको मुख्य परिभाषा से पहले शून्य स्वैपकेस को परिभाषित करना होगा।

15

अन्य भाषाओं के विपरीत आप का उपयोग किया जा सकता है, सी ++ में सबकुछ इसे इस्तेमाल करने से पहले घोषित किया जाना चाहिए। कंपाइलर आपकी स्रोत फ़ाइल को ऊपर से नीचे तक पढ़ेगा, इसलिए जब यह swapCase पर कॉल हो जाता है, तो यह नहीं पता कि यह क्या है ताकि आपको कोई त्रुटि मिल सके। आप इस तरह की एक पंक्ति के साथ मुख्य के आगे अपने कार्य की घोषणा कर सकते हैं:

void swapCase(char *name); 

या आप बस फ़ाइल में मुख्य से आगे है कि समारोह के पूरी तरह स्थानांतरित कर सकते हैं। फ़ाइल के निचले हिस्से में प्रतीत होता है कि सबसे महत्वपूर्ण कार्य (मुख्य) होने के बारे में चिंता न करें। ऐसा करने के लिए सी या सी ++ में यह बहुत आम है।

8

उस समय संकलक मुख्य() में स्वैप के लिए कॉल का सामना करता है, यह फ़ंक्शन स्वैपकेस के बारे में नहीं जानता है, इसलिए यह एक त्रुटि की रिपोर्ट करता है। आप स्थानांतरित कर सकते हैं या तो परिभाषा swapCase के मुख्य ऊपर, या मुख्य ऊपर स्वैप मामले की घोषणा:

void swapCase(char* name); 

इसके अलावा, swapCase में 32 पाठक को रोकते हैं और आश्चर्य का कारण बनता है। टिप्पणी मदद करता है! इस संदर्भ में, यह

if ('A' <= name[i] && name[i] <= 'Z') 
    name[i] += 'a' - 'A'; 
else if ('a' <= name[i] && name[i] <= 'z') 
    name[i] += 'A' - 'a'; 

मेरे आई-टेस्ट में निर्माण व्यक्तिगत शैली का विषय है। आप बस ठीक थे। मुख्य बात यह है कि नाम को संशोधित करने का तरीका [i] - 'ए' बनाम 'ए' में अंतर का उपयोग करके यह स्पष्ट हो जाता है कि क्या हो रहा है, और किसी को भी आश्चर्य नहीं करना चाहिए कि '32' वास्तव में सही है या नहीं।

शुभकामनाएं सीखना!

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