सी में विशिष्ट डेटा कैसे मुद्रित करें?

मुझे एक समस्या है कि जब उपयोगकर्ता एक ही आईडी टाइप करते हैं, तो उन्हें फिर से नाम और आईडी टाइप करने की आवश्यकता होती है। जब उपयोगकर्ता उपयोगकर्ता आईडी आईडी टाइप करते हैं, तो मैं केवल उपयोगकर्ताओं को आईडी और आईडी दोनों के बजाय आईडी इनपुट करने के लिए कह सकता हूं। कृपया मुझे कुछ संकेत दें कि यह कैसे करें। आपकी मदद के लिए धन्यवाद!

struct student
{
    char student_name[30];          
    char student_id[10];            
    int student_course_num[20]; 
    int student_course[10];
};

int main()
{
int student_num;

printf("Enter the number of students:");
scanf("%d",&student_num);
fflush(stdin);
struct student S[student_num];
char TestForId[student_num][10];
int i,j,student_code=1;
for(i=0;i
0
@ जोचिमपिलबोर्ग: विंडोज , fflush (stdin) तकनीकी रूप से परिभाषित माइक्रोसॉफ्ट द्वारा है। असल में, मैंने पिछले हफ्ते सीखा, यह लिनक्स पर भी सच है ( इनपुट स्ट्रीम के लिए, fflush() अंतर्निहित फ़ाइल से प्राप्त किए गए किसी भी बफर किए गए डेटा को छोड़ देता है, लेकिन एप्लिकेशन द्वारा इसका उपभोग नहीं किया जाता है )। यह मैक ओएस एक्स पर भी लागू होता है। सी मानक व्यवहार को अपरिभाषित छोड़ देता है; तो पॉज़िक्स
जोड़ा लेखक Jonathan Leffler, स्रोत
@ user3041923 जब आप अपनी संरचना की घोषणा करते हैं, तो आपको प्रति छात्र 30 आईडी मिलती हैं। आप एक संरचना सरणी घोषित करना था। इसे जांचें: stackoverflow.com/questions/10468128/…
जोड़ा लेखक H_squared, स्रोत
क्यों student_id [30] ? एक छात्र के पास कितने आईडी हो सकते हैं?
जोड़ा लेखक H_squared, स्रोत
Joachim Pileborg मैंने कोशिश की। पीटर मिहले उपयोगकर्ता प्रकार संख्या इसलिए मैंने int-array डाला। असल में, मूल प्रकार का आईडी चार है, लेकिन मुझे नहीं पता कि यह char क्यों है। इसलिए मैं इसे बदलता हूं। जोनाथन लेफ्लर, धन्यवाद, मैं समस्या को संशोधित करूंगा। hhachem, यह केवल 8 अंक है।
जोड़ा लेखक user3041923, स्रोत
आपकी समस्या के लिए, क्या आपने आईडी और चेक के इनपुट के चारों ओर एक लूप की कोशिश की है?
जोड़ा लेखक Some programmer dude, स्रोत
तकनीकी रूप से, fflush (stdin); अपरिभाषित है। और आपके कार्यक्रम के साथ इसकी आवश्यकता नहीं है।
जोड़ा लेखक Some programmer dude, स्रोत
कृपया सी :- डी पर एक पुस्तक खरीदें
जोड़ा लेखक Fiddling Bits, स्रोत
student_id के लिए int-array क्यों?
जोड़ा लेखक Peter Miehle, स्रोत

5 उत्तर

  1. Create an array of struct student, not just a single entry. struct student S[Student_N];

  2. Create a count of used records. size_t Student_Count = 0;

  3. Ask the student ID first before the student name.

  4. Read the student ID ( and later student name) into a local struct student local;. scanf("%29s", local.student_id); Use a width of sizeof(local.student_id) - 1.

  5. Before asking the student name, search your list 0 up to Student_Count for a matching entry. If found, fill in the rest of local with the matching data, skip next 2 steps.

  6. Read the student name into a local struct student local;. scanf(" %49[^\n]", local.student_name);. Use a format specifier that scans in spaces between first & last name.

  7. Copy local to student_id[Student_Count++].

  8. Not sure you need the student_num field. The index of S[Student_N] is the student_num.

  9. Check the results if scanf() as in if (scanf("%29s") != 1) Handle_Error();.

  10. Delete fflush(stdin);

1
जोड़ा
@ user3041923 मान लें कि पहला इनपुट एक नाम है या एक आईडी। यदि पाठ पहले की आईडी से मेल खाता है, तो यह एक आईडी है। यदि टेक्स्ट आईडी की तरह दिखता है (इसमें इसमें अंक हैं और कोई रिक्त स्थान नहीं है), तो यह एक आईडी है (या जो भी आपका मानदंड हो सकता है)। यदि पाठ किसी नाम की तरह दिखता है (इसमें कोई अंक नहीं है और रिक्त स्थान हैं), तो यह एक नाम है। अन्यथा यह कचरा है।
जोड़ा लेखक chux, स्रोत
आपके विस्तृत निर्देश के लिए धन्यवाद। मैं एक प्रश्न पूछना चाहता हूं। क्योंकि मेरे प्रोजेक्ट में बहुत सारी आवश्यकताएं हैं। मुझे इसका पालन करना होगा। अगर मैं पहले नाम टाइप करता हूं। मैं केवल छात्र आईडी कैसे देख सकता हूं?
जोड़ा लेखक user3041923, स्रोत

इसे इस्तेमाल करे:

for(i=0;i\nEnter the ID again: ");
       scanf("%d",&S.student_id[i]);
        break;
    }
}
student_code++; }   
1
जोड़ा
केवल तभी जब आईडी मेल खाता है, तो उपयोगकर्ता को आईडी को फिर से उसी आईडी के साथ इनपुट करने के लिए कहें ...
जोड़ा लेखक G one, स्रोत
मैंने यह कोशिश की, जब उपयोगकर्ता एक ही मान टाइप करता है तो यह परिभाषित नहीं कर सकता कि आईडी समान है या नहीं
जोड़ा लेखक user3041923, स्रोत
"छात्रों के लिए" हर बार "मैं के लिए" -loop के अंदर पूछा?
जोड़ा लेखक Peter Miehle, स्रोत

आपकी समस्या यह है: आपके पास एक स्ट्रक्चरल एस है जो सभी मानों को पकड़ना है। लेकिन एस के अंदर आपके नाम के लिए केवल एक ऐरे है, बजाय सभी नामों के लिए चार-सरणी की सरणी।

शायद आप क्या चाहते हैं

struct student {
   char name[50];
   int id;
}

struct student sarray[30];
1
जोड़ा
धन्यवाद! वास्तव में, मेरे शिक्षक द्वारा दो सरणी द्वारा परिभाषित मूल चार नाम। मुझे लगता है कि नाम के दो सरणी क्यों हैं। यह मुझे उलझन में है इसलिए मैं एक सरणी में संशोधित करता हूं।
जोड़ा लेखक user3041923, स्रोत

मैं एक स्ट्रक्चर सरणी बनाउंगा जहां प्रत्येक तत्व एक संरचना है जिसमें आईडी और नाम होता है। फिर मैं सरणी आईडी को क्रमबद्ध रखूंगा, ताकि यह जांचना वास्तव में आसान हो कि आईडी मौजूद है या नहीं।

उदाहरण के लिए:

  • नया आईडी = 10

  • सरणी में सबसे बड़ी आईडी 7 है (यह जानकारी ज्ञात है क्योंकि
    सरणी को क्रमबद्ध किया जाता है) इसलिए आगे की जांच करने की आवश्यकता नहीं है, बस एक
    जोड़ें नई आईडी

In order to do so , you could use qsort and bsearch

0
जोड़ा

आपको if (S.student_id [j] == S.student_id [i]) के बजाय strcmp का उपयोग करना होगा।

कुछ इस तरह :

if(0 == strcmp(S.student_id[j],S.student_id[i]))

More info about strcmp : Here

आईडी भी एक int सरणी नहीं होनी चाहिए लेकिन एक चार सरणी (सही स्ट्रिंग?)

मुझे वास्तव में आपकी int StuNum = S.student_num पसंद नहीं है; यह मुख्य के शीर्ष पर होना चाहिए।

0
जोड़ा
मैं char में बदलता हूं और strcmp का उपयोग करता हूं। असल में, मैं शब्द को छोड़ना चाहता हूं। मेरी परियोजना में student_num का नाम आवश्यक था
जोड़ा लेखक user3041923, स्रोत
उसका "मैं" एक-एक करके आगे बढ़ रहा है और नाम "नाम [i]" में डाल रहा है, इसलिए "पीटर" और "मैरी" एक "पीएमरी" स्ट्रिंग का कारण बनेंगे।
जोड़ा लेखक Peter Miehle, स्रोत
तुम सही हो ... मुझे लगता है कि इस कोड के बारे में कुछ कहना है ...
जोड़ा लेखक Joze, स्रोत