2010-02-25 22 views
5

मेरे पास एक प्रोग्राम है जहां उपयोगकर्ता इनपुट की आवश्यकता होती है, उपयोगकर्ता कुछ डेटा को सॉर्ट करने के तरीके को निर्धारित करने के लिए संख्या 1-8 में टाइप करता है, लेकिन यदि उपयोगकर्ता बस हिट करता है तो एक अलग फ़ंक्शन किया जाता है। मुझे यह कैसे करना है इसका सामान्य विचार मिलता है और मैंने सोचा कि मेरे पास क्या ठीक काम करेगा लेकिन मुझे कुछ समस्याएं आ रही हैं जब उपयोगकर्ता केवल एंटर कुंजी दबाता है।सी - उपयोगकर्ता इनपुट पढ़ना

//User input needed for sorting.  
fputs("Enter an option (1-8 or Return): ", stdout); 
fflush(stdout); 
fgets(input, sizeof input, stdin); 

printf("%s entered\n", input); //DEBUGGING PURPOSES 

//If no option was entered: 
if(input == "\n") 
{ 
    printf("Performing alternate function."); 
} 
//An option was entered. 
else 
{ 
    //Convert input string to an integer value to compare in switch statment. 
    sscanf(input, "%d", &option); 

    //Determine how data will be sorted based on option entered. 
    switch(option) 
    { 
     case 1: 
     printf("Option 1.\n"); 
     break; 

     case 2: 
     printf("Option 2.\n"); 
     break; 

     case 3: 
     printf("Option 3.\n"); 
     break; 

     case 4: 
     printf("Option 4.\n"); 
     break; 

     case 5: 
     printf("Option 5.\n"); 
     break; 

     case 6: 
     printf("Option 6.\n"); 
     break; 

     case 7: 
     printf("Option 7.\n"); 
     break; 

     case 8: 
     printf("Option 8.\n"); 
     break; 

     default: 
     printf("Error! Invalid option selected!\n"); 
     break; 
    } 
} 

अब मैं अगर बयान की कोशिश करने के लिए इनपुट == "बदल दिया है", इनपुट == "", और इनपुट == "\ n" लेकिन इनमें से कोई भी लगता है: वर्तमान में मेरे कोड इस प्रकार दिखता है काम। किसी भी सलाह की काफी सराहना की जाएगी। वर्तमान में जो मैं देख सकता हूं, प्रारंभिक अगर कथन विफल हो जाता है और कोड दूसरे भाग में कूदता है और फिर डिफ़ॉल्ट केस प्रिंट करता है।

बस चर मैं इस कोड के लिए घोषित स्पष्ट इस प्रकार हैं होने के लिए:

char input[2];   //Used to read user input. 
int option = 0;   //Convert user input to an integer (Used in switch statement). 

उत्तर

8

समस्या यह है कि आप स्ट्रिंग तुलना (if (input == "\n")) कैसे कर रहे हैं। सी में "मूल" स्ट्रिंग प्रकार नहीं है, इसलिए तारों की तुलना करने के लिए, आपको == के बजाय strcmp() का उपयोग करने की आवश्यकता है। वैकल्पिक रूप से, आप केवल इनपुट के पहले अक्षर से तुलना कर सकते हैं: if (input[0] == '\n') ...। चूंकि आप स्ट्रिंग के बजाय चार की तुलना कर रहे हैं, तुलना में फ़ंक्शन की आवश्यकता नहीं होती है।

+0

धन्यवाद! हर किसी के सुझाव काम करने लगते हैं लेकिन यह स्पष्ट करता है कि मुझे एक दूसरे के ऊपर उपयोग करना चाहिए। – oJM86o

1

आप sscanf से वापसी कोड पर कब्जा करने की जरूरत है, यह आपको बताएगा कि क्षेत्र के कई "सौंपा" कर रहे हैं, जो "एंटर" कुंजी केस में, 0

संपादित करें: स्ट्रिंग की तुलना करते समय आपको strcmp का उपयोग करना चाहिए, ऑपरेटर "==" नहीं।

0

समस्या स्ट्रिंग के साथ है, आप पॉइंटर्स की तुलना कर रहे हैं, यानी स्मृति पते। चूंकि इनपुट और "\n" समान सटीक स्मृति नहीं हैं, यह हमेशा विफल रहता है (मुझे लगता है कि इनपुट char * है)। चूंकि आप एक ही चरित्र की तलाश में हैं, इसलिए आप input को बदनाम कर सकते हैं और डबल की बजाय सिंगल कोट्स का उपयोग करके एक char की तुलना कर सकते हैं।

(*input == '\n') 

आपके इरादे के अनुसार काम करना चाहिए।

1

प्रयास करें:

इनपुट [0] == '\ n'

(या * इनपुट == '\ N')

1

आप दोहरे उद्धरण चिह्नों

बजाय एकल उद्धरण उपयोग करने की आवश्यकता
if(input == "\n") 

स्ट्रिंग "\ n" के पते के लिए इनपुट पता तुलना,

आप क्या करना चाहते क्या

#include <string.h> 

: इनपुट बफर का पहला वर्ण एकल उद्धरण के इर्द की तरह इस

if(input[0] == '\n') 

नोट चरित्र शाब्दिक \ N से तुलना करने के लिए '\ n'

2

कोशिश है शीर्ष पर और

if(strcmp(input, "\n") == 0) 

यदि आपके if (input == ...)

असल में, आपको सी में स्ट्रिंग तुलना फ़ंक्शंस का उपयोग करना होगा, आप तुलना ऑपरेटर का उपयोग नहीं कर सकते हैं।

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