मुझे लगता है कि मेरे पास संकलन समस्या है, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मेरी गलती नहीं है।

मैंने अपने कोड की तुलना किसी अन्य प्रोग्राम से की है जिसे मैंने कुछ दिन पहले बनाया था, और मुझे सचमुच कोई अंतर नहीं मिला।

FILE *f;
f = fopen("gps.txt","r");

if (f == NULL){
    printf("Couldn't open the file.");
    return 0;
}
int i= 0;
int n;
while(fscanf(f,"%c %d %d %d %c %d %d %d %d %d %d",&gps[i].sirina,&gps[i].stepen,&gps[i].min,&gps[i].sek,&gps[i].duzina,&gps[i].s1,&gps[i].m1,&gps[i].sek1,&gps[i].visina,&gps[i].brzina,&gps[i].sateliti)==11)
    i++;

n = i;
printf("%d",gps[1].sek);

फ़ाइल जानकारी:(25 55 22 एन 123 213 123 एस 25 23 2

123 123 123 एन 234 25 53 एस 123 5 1

12 41 3 एन 12 5 13 एस 1 2 4)

इस कोड का परिणाम हमेशा 0 होता है (यह सिर्फ यह जांचने के लिए है कि क्या मैं अपना कार्यक्रम जारी रख सकता हूं)। फ़ाइल में सूचनाएं लिखी गई हैं, मैंने दोबारा जांच की है कि मैंने इसे हर बार सहेजा है लेकिन फिर भी मेरा प्रोग्राम 0 आउटपुट करता है। उसी कोड पर मैंने कुछ दिन पहले लिखा था, आउटपुट ठीक है, इस तथ्य के साथ कि फ़ाइल समान है।

मुझे यह जानकर खुशी होगी कि संकलन में कोई समस्या है या मेरे कोड में कोई त्रुटि है। धन्यवाद!

0
Stefan 2 अक्टूबर 2019, 12:19
यदि आप किसी फ़ाइल की सामग्री को पढ़ना चाह रहे हैं, तो fread फ़ंक्शन देखें, न कि fscanf
 – 
Louis Durand
2 अक्टूबर 2019, 12:23
1
एक संभावित समस्या यह है कि fscanf प्रारूप %c से शुरू होता है। यह प्रारूप विनिर्देशक प्रमुख श्वेत-स्थान को नहीं छोड़ता है, उदाहरण के लिए पिछली पंक्ति को समाप्त करने वाली नई पंक्ति। प्रारूप स्ट्रिंग में एक अग्रणी स्थान जोड़ें।
 – 
Some programmer dude
2 अक्टूबर 2019, 12:24
1
मुझे लगता है कि आपका मतलब है "fopen का परिणाम हमेशा 0 होता है"। इसका मतलब है कि फ़ाइल नहीं मिली। आपको पथ जानकारी जोड़ने की आवश्यकता हो सकती है।
 – 
Paul Ogilvie
2 अक्टूबर 2019, 12:28
2
समस्या कहां होती है, इस पर निर्भर करते हुए, कृपया फ़ाइल की सामग्री या फ़ाइल लिखने वाले कोड के साथ अपने प्रश्न को संपादित करें करें। और यदि आप न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करते हैं तो यह आपको अधिक इच्छुक विज़िटर प्रदान करेगा। कृपया दौरे लें और जानें कैसे करें पूछें.
 – 
the busybee
2 अक्टूबर 2019, 12:40
मुझे एक प्रोग्राम बनाना चाहिए जहां मुझे फ़ाइल से पढ़ना चाहिए, उदाहरण के लिए, उन सभी में से सबसे बड़ी संख्या, इसलिए मुझे लूप द्वारा ऐसा करने का अनुरोध है। यह सिर्फ शुद्ध पठन नहीं है, अगर आप मुझे समझ सकते हैं। @ लुइस डूरंड
 – 
Stefan
2 अक्टूबर 2019, 12:43

1 उत्तर

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

आपके इनपुट के अनुसार fscanf में स्ट्रिंग गलत है। आप निम्न स्ट्रिंग का उपयोग करते हैं:

%c %d %d %d %c %d %d %d %d %d %d"

यह इनपुट लाइन का उदाहरण है: 25 55 22 एन 123 213 123 एस 25 23 2

आपको निम्न स्ट्रिंग की आवश्यकता है:

%d %d %d %[^A-Z] %c %d %d %d %[^A-Z] %c %d %d %d

दिए गए उदाहरण के आधार पर, आप %d का उपयोग करके 25,55,22 पढ़ते हैं।

तब और आप %[^A-Z] का उपयोग करके रिक्त स्थान आदि छोड़ते हैं, और फिर आप %c का उपयोग करके N या S पढ़ते हैं। अंतरिक्ष भी एक चरित्र है, आपको इस पर ध्यान देने की आवश्यकता है।

0
N3R4ZZuRR0 2 अक्टूबर 2019, 15:10
सच है, लेकिन आपको %[^A-Z] के परिणाम को स्टोर करने की आवश्यकता है, %[^A-Z] %c के बजाय %s काम नहीं कर सकते?
 – 
Mathieu
2 अक्टूबर 2019, 15:33
मुझे लगता है कि वह या तो उत्तर या दक्षिण उर्फ ​​एन/एस प्राप्त करना चाहता था और सभी रिक्त स्थान आदि नहीं और% [^ ए-जेड] का उपयोग करके, आपको इसे सहेजने की आवश्यकता नहीं है।
 – 
iMoyal
3 अक्टूबर 2019, 16:35