मैं सी के लिए काफी नया हूं और मुझे एक समस्या का सामना करना पड़ा है। मेरे कोड में, मैं उपयोगकर्ता की आयु, जीपीए और अक्षर ग्रेड प्राप्त करना चाहता हूं। हालांकि, जब मैं कोड चलाता हूं, तो यह केवल उम्र और जीपीए के लिए इनपुट प्राप्त करता है, अक्षर ग्रेड को अनदेखा करता है। यह केवल 3 के बजाय सभी में 2 इनपुट मांगता है। लेकिन अगर मुझे एक साथ ऐसा करने के बजाय व्यक्तिगत रूप से इनपुट की जांच करनी है, तो यह सही ढंग से काम करता है। ऐसा क्यों हो रहा है?

नीचे मेरा कोड जांचें:

int main(void) {

  int age;
  double gpa;
  char grade;

  // int
  printf("Enter your age: ");
  scanf("%d", &age);

  // double
  printf("Enter your gpa: ");
  scanf("%lf", &gpa);

  // char
  printf("Enter your letter grade: ");
  scanf("%c", &grade);

  // prints
  printf("You are %d years old", age);
  printf("\nYour gpa is %f", gpa);
  printf("\nYour grade is %c", grade);

  return 0;
}

आउटपुट:

Enter your age: 12
Enter your gpa: 4.0
Enter your letter grade: You are 12 years old
Your gpa is 4.000000
Your grade is
1
Lucky 9 नवम्बर 2021, 07:40

2 जवाब

सबसे बढ़िया उत्तर

scanf("%c", &grade) के बजाय scanf(" %c", &grade) लगाएं, क्योंकि आपको %c से पहले एक खाली जगह की जरूरत है, ताकि उस नई लाइन को छोड़ दिया जा सके जो उस समय पढ़ी नहीं गई थी जब scanf नंबर के अंत में रुकी थी।

#include <stdio.h>

int main(void) {

  int age;
  double gpa;
  char grade;

  // int
  printf("Enter your age: ");
  scanf("%d", &age);

  // double
  printf("Enter your gpa: ");
  scanf("%lf", &gpa);

  // char
  printf("Enter your letter grade: ");
  scanf(" %c", &grade);

  // prints
  printf("You are %d years old", age);
  printf("\nYour gpa is %f", gpa);
  printf("\nYour grade is %c", grade);

  return 0;
}
0
Faeemazaz Bhanej 9 नवम्बर 2021, 07:58
ओह वाह! यह आसान है फिर भी यह काम करता है। महान! मुझे लगता है कि स्कैनफ को ठीक से निष्पादित करने के लिए किसी भी "%c" से पहले एक जगह रखने के लिए मैं हमेशा ध्यान रखूंगा। बहुत - बहुत धन्यवाद!
 – 
Lucky
9 नवम्बर 2021, 08:06
अगर यह सही है तो जवाब स्वीकार करना न भूलें
 – 
Faeemazaz Bhanej
9 नवम्बर 2021, 08:07

  int age;
  double gpa;
  char grade;

  // int
  printf("Enter your age: ");
  scanf("%d", &age);

  // double
  printf("Enter your gpa: ");
  scanf("%lf", &gpa);
Getchar();

  // char
  printf("Enter your letter grade: ");
  scanf("%c", &grade);

  // prints
  printf("You are %d years old", age);
  printf("\nYour gpa is %f", gpa);
  printf("\nYour grade is %c", grade);

  return 0;
    }```



Your grade scanf statment is reading a newline character from previous statement. So , add a `getchar()` before grade statement
 which reads the newline character
0
shrey deshwal 9 नवम्बर 2021, 07:59
मुझे अब समझ आया। आपका बहुत बहुत धन्यवाद। एक और बात, मैं वास्तव में getchar() का उपयोग कब करूं? जब मैं एकाधिक स्कैनफ़ का उपयोग करता हूं, या इसे विशेष परिस्थितियों में उपयोग किया जाता है, तो क्या इसे हमेशा रखना आवश्यक है?
 – 
Lucky
9 नवम्बर 2021, 08:00
scanf() आपके द्वारा निर्दिष्ट स्थान तक इनपुट की खपत करता है, और याद रखें कि एक न्यूलाइन कैरेक्टर \n, एक स्पेस ' ' सभी कैरेक्टर हैं। getchar() का उपयोग करें जब आपको अनावश्यक वर्णों से छुटकारा पाने की आवश्यकता हो।
 – 
Uduru
9 नवम्बर 2021, 08:03
मुझे लगता है कि %c से पहले का स्थान बेहतर विकल्प है, यह अधिक मेमोरी का उपभोग नहीं कर सकता
 – 
Faeemazaz Bhanej
9 नवम्बर 2021, 08:05
Getchar मानक इनपुट स्ट्रीम stdin से एकल वर्ण पढ़ता है। उदाहरण के लिए यदि आप 1, a 5 टाइप करते हैं और फिर ENTER कुंजी दबाते हैं। तो अब इनपुट बफ़र में तीन वर्ण हैं। स्कैनफ ("% d") 1 और 5 पढ़ता है।
 – 
shrey deshwal
9 नवम्बर 2021, 08:06
आपकी अंतर्दृष्टि के लिए धन्यवाद, दोस्तों! यह वास्तव में मददगार है। मैं वास्तव में इसकी प्रशंसा करता हूँ। मुझे लगता है कि मुझे अपनी अज्ञानता को दूर करने के लिए इस मामले के बारे में और अधिक पढ़ने की जरूरत है।
 – 
Lucky
9 नवम्बर 2021, 08:10