- 1 1. परिचय
- 2 2. मानक इनपुट के हो
- 3 3. C भाषा मा मानक इनपुट को आधारभूत
- 4 4. सुरक्षित मानक इनपुटको कार्यान्वयन
- 5 5. उन्नत मानक इनपुट प्रक्रिया
- 6 6. सामान्य समस्याहरू र तिनीहरूको समाधान
- 7 7. मानक इनपुट प्रयोग गरेर अनुप्रयोग प्रोग्राम उदाहरण
- 8 8. सारांश
1. परिचय
C भाषा सिक्दै गर्दा, प्रयोगकर्ताबाट इनपुटलाई ह्यान्डल गर्ने「स्ट्यान्डर्ड इनपुट」から बच्न नसकिने महत्वपूर्ण कार्य हो।स्ट्यान्डर्ड इनपुटलाई सही रूपमा बुझेर, सुरक्षित रूपमा ह्यान्डल गर्दा, प्रोग्रामको बहुपयोगिता र विश्वसनीयता ठूलो रूपमा सुधार गर्न सकिन्छ।
यस लेखमा, C भाषामा स्ट्यान्डर्ड इनपुटको आधारभूतदेखि उन्नत प्रयोगसम्मलाई प्रणालीगत रूपमा व्याख्या गर्नेछौं। शुरुआतीहरूलाई पनि बुझ्न सजिलो बनाउने उद्देश्यले, नमुना कोडहरू समावेश गर्दै अघि बढ्नेछौं, त्यसैले कृपया यसलाई आफ्नो प्रोग्राम विकासमा उपयोग गर्नुहोस्।
स्ट्यान्डर्ड इनपुटको महत्व
स्ट्यान्डर्ड इनपुट प्रोग्रामले बाह्य स्रोतबाट डेटा प्राप्त गर्ने आधारभूत मेकानिज्म हो।उदाहरणस्वरूप, निम्न जस्ता अवस्थाहरूमा उपयोग गरिन्छ:
- प्रयोगकर्ताले इनपुट गरेको संख्यालाई प्रयोग गर्ने गणना एप
- स्ट्रिङ प्रयोग गरेर खोज कार्य
- कमाण्ड लाइनबाट निर्देश अनुसारको गतिशील प्रोग्राम
यस्ता केसहरूमा, स्ट्यान्डर्ड इनपुटलाई सही रूपमा ह्यान्डल गर्दा, प्रभावकारी र सुरक्षित प्रोग्राम निर्माण गर्न सकिन्छ।
यस लेखमा सिक्न सकिने कुरा
यस लेखमा तलका बिषयहरूलाई समेट्नेछौं:
- स्ट्यान्डर्ड इनपुटको आधारभूत मेकानिज्म र C भाषामा कार्यान्वयन विधि
scanf
रfgets
जस्ता फङ्क्सनहरूको प्रयोग विधि- सुरक्षित र उच्च विश्वसनीयतायुक्त स्ट्यान्डर्ड इनपुटको कार्यान्वयन विधि
- उन्नत डेटा प्रोसेसिङ प्रविधिहरू
- प्रायः देखिने समस्याहरू र तिनीहरूको समाधान
लेखको लक्षित पाठकहरू
- पहिलो पटक C भाषा सिक्ने शुरुआतीहरू
- स्ट्यान्ड इनपुटको प्रयोगमा आत्मविश्वास नभएका प्रोग्रामरहरू
- सुरक्षित र प्रभावकारी इनपुट प्रोसेसिङ हासिल गर्न चाहने व्यक्तिहरू
2. मानक इनपुट के हो
C Gengo मा मानक इनपुट भनेको प्रोग्रामले बाहिरबाट डेटा प्राप्त गर्ने आधारभूत मेकानिज्म हो। मानक इनपुट “मानक इनपुट/आउटपुट” को एक भाग हो, र टर्मिनल वा कमाण्ड लाइन मार्फत प्रयोगकर्ताले प्रोग्रामलाई डेटा प्रदान गर्छ। यस खण्डमा, मानक इनपुटको आधारभूत अवधारणा र भूमिका बारे व्याख्या गरिन्छ।
मानक इनपुटको परिभाषा
मानक इनपुट (Standard Input, stdin
) भनेको प्रोग्रामले बाहिरबाट डेटा प्राप्त गर्न प्रयोग गर्ने डेटा स्ट्रिम हो। C Gengo मा, stdio.h
लाइब्रेरी प्रयोग गरेर, यो मानक इनपुटलाई सजिलै सञ्चालन गर्न सकिन्छ।
- डेटा सामान्यतया किबोर्डबाट इनपुट गरिन्छ।
- इनपुट गरिएको डेटा प्रोग्राम भित्र प्रक्रिया गरिन्छ, र परिणाम मानक आउटपुटमा प्रिन्ट गरिन्छ।
मानक इनपुट/आउटपुटको मेकानिज्म
C Gengo मा, तलका ३ वटा मानक स्ट्रिमहरू उपलब्ध छन्:
- मानक इनपुट(stdin): बाहिरबाट डेटा प्राप्त गर्न प्रयोग गरिन्छ।
- मानक आउटपुट(stdout): प्रोग्रामको परिणाम आउटपुट गर्न प्रयोग गरिन्छ।
- मानक त्रुटि आउटपुट(stderr): त्रुटि सन्देशहरू आउटपुट गर्न प्रयोग गरिन्छ।
व्यावहारिक कार्य उदाहरण
अगाडि दिइएको उदाहरणले मानक इनपुट प्रयोग गरेर संख्यालाई प्राप्त गर्छ, र त्यस मानलाई मानक आउटपुटमा प्रिन्ट गर्ने सरल प्रोग्राम हो।
#include <stdio.h>
int main() {
int number;
printf("कृपया संख्या प्रविष्ट गर्नुहोस्: ");
scanf("%d", &number); // मानक इनपुटबाट पूर्णांक पढ्नुहोस्
printf("प्रविष्ट गरिएको संख्या: %dn", number); // मानक आउटपुटमा आउटपुट गर्नुहोस्
return 0;
}
मानक इनपुटको भूमिका र महत्त्व
मानक इनपुट निम्न प्रकारका प्रोग्रामहरूमा प्रयोग गरिन्छ:
- डेटा प्रोसेसिङ प्रोग्राम: संख्याहरू वा स्ट्रिङहरू इनपुट गरी, गणना वा विश्लेषण गर्दछ।
- इन्टरएक्टिभ एप्लिकेशन: प्रयोगकर्ताको निर्देशन प्राप्त गरी कार्यलाई परिवर्तन गर्छ।
- डायनामिक डेटा अपरेसन: प्रयोगकर्ताले इनपुट गरेको डेटा रियल‑टाइममा प्रोसेस गर्छ।
मानक इनपुटको फाइदाहरू
- लचिलोपन: किबोर्ड, पाइप, रिडिरेक्ट आदि विभिन्न इनपुट स्रोतहरूलाई समर्थन गर्दछ।
- सजिलोपन: इनबिल्ट
scanf
रfgets
प्रयोग गरेर, सजिलै इनपुट प्रोसेस गर्न सकिन्छ।
3. C भाषा मा मानक इनपुट को आधारभूत
C भाषामा, मानक इनपुट प्रयोग गरेर प्रयोगकर्ताबाट डेटा प्राप्त गर्नका लागि केही फलनहरू उपलब्ध छन्। सबैभन्दा आधारभूत फलनहरूमा scanf
र fgets
समावेश छन्। यस खण्डमा, प्रत्येक फलनको प्रयोग विधि र विशेषताहरूलाई व्यावहारिक उदाहरणहरूसँगै व्याख्या गर्नेछौं।
scanf
फलनको प्रयोग विधि
scanf
ले, ढाँचा निर्दिष्टकर्ता प्रयोग गरेर इनपुट गरिएको डेटा विश्लेषण गरी, चलमा संग्रह गर्नको लागि फलन हो।
मूल संरचना
int scanf(const char *format, ...);
format
: डेटा को स्वरूप निर्दिष्ट गर्ने ढाँचा स्ट्रिङ।...
: इनपुट गरिएको डेटा संग्रह गर्ने चलको ठेगाना।
मुख्य ढाँचा निर्दिष्टकर्ता
निर्दिष्टकर्ता | विवरण | उदाहरण |
---|---|---|
%d | पूर्णांक | 42 |
%f | फ्लोटिङ बिन्दु संख्या | 3.14 |
%c | १ अक्षर | A |
%s | स्ट्रिङ | Hello |
उदाहरण प्रयोग
#include <stdio.h>
int main() {
int age;
printf("उमेर प्रविष्ट गर्नुहोस्: ");
scanf("%d", &age); // पूर्णांक पढ्नुहोस्
printf("प्रविष्ट गरिएको उमेर: %dn", age);
return 0;
}
ध्यान दिनु पर्ने बुँदा
- इनपुट गर्दा सही स्वरूपमा डेटा नदिएमा त्रुटि हुन सक्छ।
- बफर ओभरफ्लो रोक्नको लागि, इनपुट आकार सीमित गर्नु महत्त्वपूर्ण छ (उदाहरण:
%s
प्रयोग गर्दा)।
fgets
फलनको प्रयोग विधि
fgets
लाई, पङ्क्ति-आधारित स्ट्रिङ पढ्न प्रयोग गरिने फलन हो, र scanf
भन्दा बढी सुरक्षित मानिन्छ।
मूल संरचना
char *fgets(char *str, int n, FILE *stream);
str
: इनपुट संग्रह गर्ने अक्षर एरे।n
: पढ्ने अधिकतम अक्षर संख्या (एरेको आकार)।stream
: इनपुट स्रोत (सामान्यतयाstdin
)।
उदाहरण प्रयोग
#include <stdio.h>
int main() {
char name[50];
printf("नाम प्रविष्ट गर्नुहोस्: ");
fgets(name, 50, stdin); // अधिकतम 49 अक्षर पढ्नुहोस्
printf("प्रविष्ट गरिएको नाम: %s", name);
return 0;
}
ध्यान दिनु पर्ने बुँदा
- इनपुट बफर आकार भन्दा बढी भएमा, बाँकी डेटा काटी फालिन्छ।
- नयाँ पङ्क्ति अक्षर समावेश भएमा, म्यानुअली हटाउनुपर्छ।
नयाँ पङ्क्ति अक्षर हटाउने विधि
name[strcspn(name, "n")] = '\0';
scanf
र fgets
को तुलना
विशेषता | scanf | fgets |
---|---|---|
उपयोग | ढाँचा निर्दिष्ट गरेर संख्यात्मक वा स्ट्रिङ पढ्ने | पङ्क्ति-आधारित स्ट्रिङ पढ्ने |
सुरक्षा | बफर ओभरफ्लो जोखिम | बफर आकार नियन्त्रण सम्भव |
लचिलोपन | ढाँचा निर्दिष्ट गर्न सम्भव | पूरा इनपुटलाई स्ट्रिङको रूपमा प्राप्त |
कुन प्रयोग गर्ने?
scanf
प्रयोग गर्ने अवस्थामा: संख्यात्मक वा विशेष डेटा स्वरूप सिधै प्राप्त गर्न चाहँदा।fgets
प्रयोग गर्ने अवस्थामा: सुरक्षा प्राथमिकता राखेर, लामो स्ट्रिङ वा जटिल इनपुट प्रक्रिया गर्न चाहँदा।
4. सुरक्षित मानक इनपुटको कार्यान्वयन
C भाषा मा मानक इनपुटलाई ह्यान्डल गर्दा, सुरक्षा सुनिश्चित गर्नु अत्यन्त महत्वपूर्ण छ। अनुचित इनपुट प्रोसेसिंगले बफर ओभरफ्लो वा अनिर्धारित व्यवहार उत्पन्न गर्न सक्छ, जसले कार्यक्रमको विश्वसनीयता घटाउन सक्छ। यस खण्डमा, सुरक्षित मानक इनपुटको कार्यान्वयन विधिलाई विशिष्ट उदाहरणहरूसँगै व्याख्या गरिन्छ।
बफर ओभरफ्लो रोक्ने
scanf
फंक्शन उपयोगी छ, तर इनपुट साइज सीमित नगरेमा बफर ओभरफ्लो हुन सक्छ। यसलाई रोक्नको लागि, फर्म्याट स्पेसिफायरमा इनपुट साइज निर्दिष्ट गर्नु महत्त्वपूर्ण छ।
इनपुट साइज सीमित गर्ने उदाहरण
#include <stdio.h>
int main() {
char input[10];
printf("कृपया अधिकतम 9 अक्षरको स्ट्रिङ प्रविष्ट गर्नुहोस्: ");
scanf("%9s", input); // अधिकतम 9 अक्षर पढ्नुहोस्
printf("प्रविष्ट गरिएको स्ट्रिङ: %sn", input);
return 0;
}
बिन्दुहरू
%9s
जस्तै, इनपुट साइज निर्दिष्ट गरेर, एरे साइज भन्दा बढी इनपुटलाई रोक्न सकिन्छ।
सुरक्षित इनपुटको लागिfgets
प्रयोग गर्नुहोस्
fgets
ले पढ्ने क्यारेक्टरको संख्या निर्दिष्ट गर्न सक्ने कारण बफर ओभरफ्लोको जोखिम घटाउँछ। विशेष गरी लामो स्ट्रिङ वा लाइन-आधारित इनपुटलाई ह्यान्डल गर्दा उपयुक्त छ।
fgets
को कार्यान्वयन उदाहरण
#include <stdio.h>
#include <string.h>
int main() {
char buffer[20];
printf("स्ट्रिङ प्रविष्ट गर्नुहोस्: ");
fgets(buffer, sizeof(buffer), stdin); // अधिकतम 19 अक्षरहरू पढ्नु
buffer[strcspn(buffer, "n")] = '\0'; // नयाँ पङ्क्ति हटाउनुहोस्
printf("प्रविष्ट गरिएको स्ट्रिङ: %sn", buffer);
return 0;
}
बिन्दुहरू
sizeof(buffer)
प्रयोग गरेर बफर साइजलाई स्वचालित रूपमा सेट गरिन्छ।strcspn
फंक्शन प्रयोग गरेर, इनपुटमा आएको newline क्यारेक्टरलाई हटाइन्छ।
इनपुट डेटा प्रमाणिकरण
सुरक्षित इनपुट प्राप्त गर्न प्रयोगकर्ताले दिएको डेटा प्रमाणिकरण गर्नु महत्त्वपूर्ण छ। उदाहरणका लागि, संख्यात्मक इनपुटको अवस्थामा, स्ट्रिङको रूपमा इनपुट लिई, उपयुक्त रूपान्तरण र त्रुटि जाँच गर्ने विधि प्रयोग गर्न सकिन्छ।
संख्यात्मक इनपुट प्रमाणिकरण उदाहरण
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char buffer[20];
long number;
char *endptr;
printf("पूर्णांक प्रविष्टि गर्नुहोस्: ");
fgets(buffer, sizeof(buffer), stdin);
errno = 0; // त्रुटि स्थिति रिसेट गर्नुहोस्
number = strtol(buffer, &endptr, 10); // स्ट्रिङलाई पूर्णांकमा परिवर्तन गर्नुहोस्
if (errno != 0 || endptr == buffer || *endptr != '\0') {
printf("वैध पूर्णांक प्रविष्टि गर्नुहोस्।n");
} else {
printf("प्रविष्ट गरिएको पूर्णांक: %ldn", number);
}
return 0;
}
बिन्दुहरू
strtol
प्रयोग गर्दा, इनपुटको संख्यात्मक रूपान्तरणको क्रममा उत्पन्न हुने त्रुटि पत्ता लगाउन सकिन्छ।errno
रendptr
सँगै प्रयोग गरेर, रूपान्तरण परिणाम वैध छ कि छैन जाँच गर्न सकिन्छ।
त्रुटि ह्यान्डलिंगको सर्वश्रेष्ठ अभ्यास
मानक इनपुटमा, त्रुटि ह्यान्डलिंगलाई उपयुक्त रूपमा कार्यान्वयन गर्नु विश्वसनीयता सुधारको कुञ्जी हो।
त्रुटि जाँच गर्ने उदाहरण
#include <stdio.h>
int main() {
int value;
printf("पूर्णांक प्रविष्ट गर्नुहोस्: ");
if (scanf("%d", &value) != 1) { // इनपुट असफल भएमा
printf("इनपुट अवैध छ।n");
return 1; // त्रुटि समाप्त
}
printf("प्रविष्ट गरिएको पूर्णांक: %dn", value);
return 0;
}
बिन्दुहरू
scanf
को रिटर्न भ्यालु जाँच गरेर, सही ढाँचामा इनपुट नभएमा त्रुटि प्रक्रिया गरिन्छ।
सुरक्षित इनपुट प्रोसेसको सारांश
scanf
प्रयोग गर्दा, फर्म्याट स्पेसिफायरमा साइज सीमित गर्नुहोस्।- लामो स्ट्रिङ वा लाइन-आधारित इनपुटको लागि,
fgets
प्रयोग गर्नुहोस्। - प्रयोगकर्ता इनपुटलाई भरोसा नगरी, सधैं प्रमाणिकरण र त्रुटि ह्यान्डलिंग गर्नुहोस्।
5. उन्नत मानक इनपुट प्रक्रिया
मानक इनपुटको आधारभूत प्रयोग बुझिसकेपछि, उन्नत प्रक्रिया सिकेर, अझ जटिल इनपुट डेटा र परिदृश्यहरूलाई सामना गर्न सकिन्छ। यस भागमा, बहु डेटा एकै पटक इनपुट गर्ने, लाइनब्रेक र स्पेसको ह्यान्डलिङ जस्ता मानक इनपुटलाई प्रभावकारी रूपमा प्रयोग गर्ने तरिकाहरूलाई व्याख्या गरिन्छ।
बहु डेटा एकै पटक इनपुट गर्ने
मानक इनपुटबाट बहु डेटा प्राप्त गरी, प्रत्येकलाई प्रक्रिया गर्ने धेरै स्थितिहरू छन्। यहाँ, स्पेस वा कमासँग विभाजित डेटा पढ्ने तरिकालाई व्याख्या गरिन्छ।
स्पेस विभाजन इनपुटलाई प्रक्रिया गर्ने उदाहरण
#include <stdio.h>
int main() {
int numbers[5];
printf("कृपया 5 वटा पूर्णांकहरूलाई स्पेसले छुट्याएर प्रविष्ट गर्नुहोस्: ");
for (int i = 0; i < 5; i++) {
scanf("%d", &numbers[i]); // स्पेसले छुट्याएर प्रविष्ट
}
printf("प्रविष्ट गरिएका पूर्णांकहरू: ");
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("n");
return 0;
}
कमासँग विभाजन इनपुटलाई प्रक्रिया गर्ने उदाहरण
#include <stdio.h>
int main() {
int numbers[3];
printf("तीन पूर्णांकहरू अल्पविरामले छुट्याएर प्रविष्ट गर्नुहोस्: ");
scanf("%d,%d,%d", &numbers[0], &numbers[1], &numbers[2]); // अल्पविरामले छुट्याएर इनपुट
printf("प्रविष्ट गरिएका पूर्णांकहरू: %d, %d, %dn", numbers[0], numbers[1], numbers[2]);
return 0;
}
लाइनब्रेक र स्पेस समावेश गर्ने इनपुटको ह्यान्डलिङ
मानक इनपुटमा, लाइनब्रेक क्यारेक्टर र स्पेस क्यारेक्टर मिश्रित हुने केसहरू पनि हुन्छन्। तीलाई सही रूपमा प्रक्रिया गर्ने तरिकालाई हेरौं।
लाइनब्रेकलाई सही रूपमा प्रक्रिया गर्ने उदाहरण
लाइनब्रेक क्यारेक्टर समावेश गर्ने इनपुटलाई प्रक्रिया गर्न, fgets
प्रयोग गरी, लाइनब्रेक क्यारेक्टरलाई म्यानुअली हटाइन्छ।
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("कृपया वाक्य प्रविष्ट गर्नुहोस्: ");
fgets(input, sizeof(input), stdin);
input[strcspn(input, "n")] = '\0'; // लाइन ब्रेक हटाउनुहोस्
printf("प्रविष्ट गरिएको वाक्य: %sn", input);
return 0;
}
बहु लाइनको इनपुटलाई प्रक्रिया गर्ने
बहु लाइनको इनपुट प्राप्त गरी, प्रत्येक लाइनमा प्रक्रिया गर्ने प्रोग्रामहरू पाठ विश्लेषण र डेटा प्रोसेसिङमा बारार प्रयोग गरिन्छ।
बहु लाइनलाई दोहोर्याएर प्रक्रिया गर्ने उदाहरण
#include <stdio.h>
int main() {
char line[100];
printf("कृपया बहु-रेखा पाठ प्रविष्ट गर्नुहोस् (समाप्त गर्न Ctrl+D थिच्नुहोस्):n");
while (fgets(line, sizeof(line), stdin) != NULL) {
printf("प्रविष्ट गरिएको पंक्ति: %s", line);
}
return 0;
}
डायनामिक इनपुट डेटा प्रक्रिया
इनपुट डेटा डायनामिक रूपमा परिवर्तन हुने अवस्थामा, प्रभावकारी रूपमा प्रक्रिया गर्न उपाय आवश्यक हुन्छ। अर्को उदाहरणमा, अज्ञात संख्यामा पूर्णांकहरू इनपुट गरी, तिनको योग गणना गरिन्छ।
डायनामिक इनपुट डेटा प्रक्रिया उदाहरण
#include <stdio.h>
int main() {
int number, sum = 0;
printf("पूर्णांक प्रविष्ट गर्नुहोस् (समाप्त गर्न Ctrl+D थिच्नुहोस्):n");
while (scanf("%d", &number) == 1) {
sum += number;
}
printf("प्रविष्ट गरिएका पूर्णांकको कुल: %dn", sum);
return 0;
}
सारांश
उन्नत मानक इनपुट प्रक्रियालाई प्रयोग गरेर, जटिल डेटा रनाम परिदृश्यहरूलाई सामना गर्न सक्ने प्रोग्राम निर्माण गर्न सकिन्छ। बहु डेटा प्रक्रिया र लाइनब्रेकको ह्यान्डलिङमा परिचित भएर, अझ उन्नत प्रोग्राम डिजाइन सम्भव हुन्छ।
6. सामान्य समस्याहरू र तिनीहरूको समाधान
C भाषा मा मानक इनपुट प्रयोग गर्दा, शुरुआतीहरूले प्रायः सामना गर्ने समस्याहरू र तिनीहरूको समाधानलाई संकलन गरेका छौं। यी समस्याहरूलाई बुझेर, उपयुक्त समाधान अपनाएमा, अधिक विश्वसनीय प्रोग्राम बनाउन सकिन्छ।
scanf
को समस्या र समाधान
समस्या1: इनपुट स्किप समस्या
scanf
द्वारा स्ट्रिंग वा इन्टिजर पढ्दा, नयाँ लाइन वा खाली स्थानले अर्को इनपुट प्रक्रियामा प्रभाव पार्न सक्छ।
उदाहरण
#include <stdio.h>
int main() {
int number;
char letter;
printf("पूर्णांक प्रविष्ट गर्नुहोस्: ");
scanf("%d", &number);
printf("अक्षर प्रविष्ट गर्नुहोस्: ");
scanf("%c", &letter); // पङ्क्ति परिवर्तन वर्ण पढ्छ
printf("प्रविष्ट गरिएको पूर्णांक: %d, अक्षर: %cn", number, letter);
return 0;
}
समाधान
नयाँ लाइन क्यारेक्टर र अतिरिक्त इनपुटलाई बेवास्ता गर्न, scanf
को अघि खाली क्यारेक्टर थप्नुहोस्।
scanf(" %c", &letter); // अतिरिक्त नयाँ पङ्क्ति नदेखाउन खाली स्थान थप्नुहोस्
समस्या2: बफर ओभरफ्लो
scanf
द्वारा लामो स्ट्रिंग पढ्दा, इनपुट बफर भन्दा बढी भएमा प्रोग्राम क्र्यास हुन सक्छ।
उदाहरण
char input[10];
scanf("%s", input); // इनपुट आकार 10 अक्षर भन्दा बढी भएमा ओभरफ्लो हुन्छ
समाधान
फरम्याट स्पेसिफायरले इनपुट साइजलाई सीमित गर्नुहोस्।
scanf("%9s", input); // अधिकतम 9 अक्षरको सीमा
वा, fgets
प्रयोग गर्ने विधि पनि सुरक्षित छ।
fgets
को समस्या र समाधान
समस्या1: नयाँ लाइन क्यारेक्टरको ह्यान्डलिंग
fgets
इनपुटको अन्त्यमा नयाँ लाइन क्यारेक्टर समावेश गर्ने कारण, स्ट्रिंग तुलना वा प्रोसेसिङ गर्दा अनपेक्षित व्यवहार हुन सक्छ।
उदाहरण
char input[20];
fgets(input, sizeof(input), stdin);
if (strcmp(input, "yes") == 0) {
printf("इनपुट yes हो。n");
}
यस अवस्थामा, fgets
द्वारा पढिएको स्ट्रिंग "yesn"
हुन्छ, जसले तुलना असफल बनाउँछ।
समाधान
नयाँ लाइन क्यारेक्टर हटाउनुहोस्।
input[strcspn(input, "n")] = '\0';
इनपुट त्रुटिको समाधान
समस्या1: अमान्य इनपुटको ह्यान्डलिंग
संख्या अपेक्षित अवस्थामा, स्ट्रिंग इनपुट भएमा प्रोग्राम सहीसँग काम नगर्न सक्छ।
उदाहरण
int number;
scanf("%d", &number); // स्ट्रिङ इनपुट गर्दा सञ्चालन अस्थिर हुन्छ
समाधान
इनपुटको वैधता जाँच गर्ने विधि अपनाउनुहोस्।
if (scanf("%d", &number) != 1) {
printf("अमान्य इनपुट हो。n");
while (getchar() != 'n'); // इनपुट बफर साफ गर्नुहोस्
}
बहु-लाइन इनपुट सम्बन्धी समस्या
समस्या: scanf
र fgets
को मिश्रण
scanf
र fgets
लाई एउटै प्रोग्राममा प्रयोग गर्दा, अनपेक्षित व्यवहार हुन सक्छ।
कारण
scanf
नयाँ लाइन क्यारेक्टर नछोड्ने कारण, त्यसपछि fgets
कल गर्दा त्यो नयाँ लाइन क्यारेक्टर पढिन्छ।
समाधान
scanf
पछि इनपुट बफर सफा गर्नुहोस्।
while (getchar() != 'n');
सारांश
C भाषा मा मानक इनपुटमा धेरै जालहरू छन्, तर समस्याको कारण बुझेर उपयुक्त समाधान गर्दा सुरक्षित र प्रभावकारी प्रोग्राम बनाउन सकिन्छ। विशेष गरी, scanf
र fgets
को विशेषताहरू बुझेर, प्रयोग अनुसार फरक-फरक प्रयोग गर्नु महत्त्वपूर्ण छ।

7. मानक इनपुट प्रयोग गरेर अनुप्रयोग प्रोग्राम उदाहरण
यहाँ, मानक इनपुटलाई उपयोग गरेर विशिष्ट प्रोग्राम उदाहरणहरू प्रस्तुत गरिन्छ। आधारभूत प्रयोगबाट थोरै अनुप्रयोगात्मक परिदृश्यसम्म, व्यावहारिक कोड मार्फत सिकौं।
उदाहरण1: संख्याको योग र औसत गणना गर्ने प्रोग्राम
यो प्रोग्रामले मानक इनपुटबाट धेरै पूर्णांकहरू प्राप्त गरी, योग र औसत गणना गर्दछ।
#include <stdio.h>
int main() {
int numbers[100];
int count = 0, sum = 0;
float average;
printf("स्पेसले छुट्याइएको पूर्णांकहरू प्रविष्ट गर्नुहोस् (समाप्त गर्न Ctrl+D थिच्नुहोस्):n");
while (scanf("%d", &numbers[count]) == 1) {
sum += numbers[count];
count++;
}
if (count > 0) {
average = (float)sum / count;
printf("कुल: %d, औसत: %.2fn", sum, average);
} else {
printf("प्रविष्ट गरिएको संख्या छैन।n");
}
return 0;
}
उदाहरण2: पालिन्ड्रोम जाँच प्रोग्राम
यो प्रोग्रामले स्ट्रिङ पालिन्ड्रोम (अग्रबाट पढ्दा र पछाडिबाट पढ्दा समान) हो कि होइन जाँच गर्दछ।
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main() {
char input[100];
printf("कृपया स्ट्रिङ प्रविष्ट गर्नुहोस्: ");
fgets(input, sizeof(input), stdin);
// नयाँ पंक्ति हटाउनुहोस्
input[strcspn(input, "n")] = '\0';
if (isPalindrome(input)) {
printf("प्रविष्ट गरिएको स्ट्रिङ पालीन्ड्रोम हो।n");
} else {
printf("प्रविष्ट गरिएको स्ट्रिङ पालीन्ड्रोम होइन।n");
}
return 0;
}
उदाहरण3: CSV ढाँचाको डेटा प्रक्रिया गर्ने प्रोग्राम
यो प्रोग्रामले CSV (कम्मा-सेपरेटेड भ्यालु) ढाँचाको डेटा पढी, प्रत्येक मानलाई अलग‑अलग प्रक्रिया गर्दछ।
#include <stdio.h>
#include <string.h>
int main() {
char input[200];
char *token;
printf("CSV ढाँचामा डेटा प्रविष्टि गर्नुहोस्: ");
fgets(input, sizeof(input), stdin);
// नयाँ पङ्क्ति हटाउनुहोस्
input[strcspn(input, "n")] = '\0';
// कमा द्वारा विभाजन
token = strtok(input, ",");
while (token != NULL) {
printf("मान: %sn", token);
token = strtok(NULL, ",");
}
return 0;
}
उदाहरण4: गतिशील इनपुट प्राप्त गर्ने अन्तरक्रियात्मक प्रोग्राम
यो प्रोग्रामले प्रयोगकर्ताबाट धेरै पटक इनपुट लिई, सो इनपुटको सामग्री अनुसार प्रक्रिया गर्दछ।
#include <stdio.h>
#include <string.h>
int main() {
char input[50];
printf("समाप्त गर्न 'exit' टाइप गर्नुहोस्।n");
while (1) {
printf("कमाण्ड टाइप गर्नुहोस्: ");
fgets(input, sizeof(input), stdin);
// नयाँ पङ्क्ति हटाउनुहोस्
input[strcspn(input, "n")] = '\0';
if (strcmp(input, "exit") == 0) {
printf("प्रोग्राम बन्द गरियो।n");
break;
} else {
printf("प्रविष्ट गरिएको कमाण्ड: %sn", input);
}
}
return 0;
}
सारांश
अनुप्रयोगात्मक मानक इनपुटको प्रयोग सिकेर, अझ व्यावहारिक र अन्तरक्रियात्मक प्रोग्रामहरू निर्माण गर्न सकिन्छ। यी उदाहरणहरूलाई सन्दर्भ गरी, आफ्नै प्रोजेक्टको लागि उपयुक्त इनपुट प्रक्रिया विधि सोचेर लागू गर्नुहोस्।
8. सारांश
C भाषा मा मानक इनपुटको प्रयोगलाई आधारभूतदेखि उन्नतसम्म व्याख्या गरेका छौं। यस लेख मार्फत, मानक इनपुटको संरचना र सुरक्षित रूपमा प्रयोग गर्ने तरिका, साथै उन्नत प्रोग्राम उदाहरणहरू बुझ्नुभएको आशा गर्छौं। यहाँ, सिकेको सामग्रीलाई छोटकरीमा पुनरावलोकन गर्छौं।
मानक इनपुटको महत्त्वको पुनः पुष्टि
- मानक इनपुट प्रोग्रामले बाह्य स्रोतबाट डेटा प्राप्त गरी गतिशील रूपमा कार्य गर्नको लागि आधारभूत कार्य हो।
- C भाषामा,
scanf
रfgets
प्रयोग गरेर, संख्यात्मक वा स्ट्रिङ इनपुट गर्न सकिन्छ।
सुरक्षित र प्रभावकारी इनपुट प्रक्रिया बिन्दुहरू
- बफर ओभरफ्लो रोक्नु
scanf
प्रयोग गरेर इनपुट आकार सीमित गर्नु (जस्तै%9s
आदि)।- लामो इनपुट वा पङ्क्ति-आधारित इनपुटको लागि
fgets
प्रयोग गर्नु।
- इनपुट डेटा को प्रमाणीकरण
- संख्यात्मक इनपुटको लागि
strtol
वाstrtod
प्रयोग गरी त्रुटि पत्ता लगाउनु। - अवैध इनपुट भएमा, उपयुक्त त्रुटि ह्यान्डलिङ्ग गर्नु।
- उन्नत प्रक्रिया
- बहु डेटा को एकैपटक इनपुट र लाइन ब्रेक क्यारेक्टरको ह्यान्डलिङ्गमा ध्यान दिँदै प्रक्रिया कार्यान्वयन गर्नु।
अर्को चरण
मानक इनपुटको आधार सिकेपछि, तलका चरणहरूमा अगाडि बढेर थप सीप निखार्न सकिन्छ।
- मानक आउटपुट र मानक त्रुटि आउटपुट को उपयोग: त्रुटि सन्देश र लगको आउटपुट विधि सिक्नु।
- फाइल अपरेसन: मानक इनपुट र फाइल इनपुटलाई संयोजन गरेर, अझ उन्नत प्रोग्राम बनाउनु।
- व्यावहारिक अभ्यास समाधान गर्नु: यस लेखको उन्नत प्रोग्राम उदाहरणलाई सन्दर्भ गरी, आफ्नै परिदृश्य डिजाइन गरी कार्यान्वयन गर्नुहोस्।
पाठकहरूलाई सन्देश
मानक इनपुट C भाषा प्रोग्रामिङको आधारभूत भएता पनि गहिरो विषय हो। यस लेखलाई सन्दर्भ गरी, सुरक्षित र प्रभावकारी इनपुट प्रक्रिया सिक्नु, र थप सीप उन्नति लक्ष्य गर्नुहोस्। सानो प्रश्नहरू पनि क्रमशः समाधान गर्दै अघि बढ्नु, प्रोग्रामिङ अध्ययनको ठूलो कदम हो।