2010-02-08 14 views
6

मैं सी में एक तर्क मान पार्स करने और संख्या को दोहरे मान में बदलने की कोशिश कर रहा हूं। मेरे पास है:सी तर्क स्ट्रिंग्स से डबल पार्सिंग

char *stringEnd; double num = strtod("123.0", &stringEnd);

मैं 123.0 इस्तेमाल किया सिर्फ समारोह का परीक्षण करने, लेकिन यह हमेशा 0.0 का एक मान देता है। क्या कोई जानता है कि मैं क्या गलत कर रहा हूं?

+1

यह ठीक दिखता है, कहीं और होना चाहिए। शायद हमें और कोड दिखाओ? –

+0

स्ट्रिंगएंड पर मेमोरी प्रबंधन को न भूलें, अभी, यह स्मृति के किसी भी मूल्य पर इंगित करता है। –

उत्तर

7

क्या आप प्रासंगिक शीर्षलेख शामिल कर रहे हैं? यानी: #include <stdlib.h>

पहले हालांकि (और आपको वैसे भी यह हर समय करना चाहिए), सभी चेतावनियों के साथ संकलन करने का प्रयास करें (-Wall जीसीसी पर)।

यदि आपको strtod के बारे में कोई चेतावनी नहीं है, तो यह दिखाता है कि समस्या कहां से आ रही है।

यह एक बुरा है, क्योंकि सी निश्चित रूप से किसी भी समारोह की घोषणा करेगा, जिसमें वापसी करने वाले int के रूप में प्रोटोटाइप नहीं है!

+0

हम्म, डाउनवोट क्यों? मुझे यकीन है कि यह सही जवाब है। ओह अच्छा। –

+1

काफी नहीं: यह निश्चित रूप से एक int को वापस करने के रूप में लेता है, 0 नहीं। लेकिन आप वही सवाल पूछ रहे हैं जो मैं ... –

+1

यह स्पष्ट रूप से * घोषित करता है * इसे वापस लौटने के रूप में घोषित करता है। परिभाषा अंतर्निहित नहीं है: यह वास्तव में लाइब्रेरी फ़ंक्शन को बुला रहा है, गलत घोषणा के साथ सही परिभाषा। इसलिए वापसी मूल्य के लिए गलत स्थान की तलाश - एक एफपी रजिस्टर के बजाय एक पूर्णांक रजिस्टर। – Potatoswatter

1

आप sscanf का उपयोग कर सकते हैं।

double num; 
sscanf("123.0", "%lf", &num); 
+0

जब तक आप एक स्ट्रिंग से एकाधिक आइटम पार्स करने का प्रयास नहीं कर रहे हैं, तब तक 'स्ट्रैटोड' पर 'sscanf' का उपयोग करने का कोई लाभ नहीं है। यह अधिक जटिल है और विकृत डेटा का पता लगाने में इसे कठिन बनाने की कमी है। – jamesdlin

1

आप आप कर सकते हैं यदि strtod उपयोग करने के लिए:

double num = strtod("123.0",NULL); 

आप भी उपयोग कर सकते हैं sscanf

double num;  
sscanf("123.0","%lf",&num); 
+0

-1।आप त्रुटियों का पता लगाने के तरीके को छोड़कर अपने कोड को दोहरा रहे हैं (स्ट्रेट के लिए दूसरा पैरामीटर यही है) और वास्तव में पहले (हालांकि केवल 2 मिनट) उत्तर दोहराया जाता है। –

1

आप stdlib.h शामिल करने के लिए

0

जो भाषा में की जरूरत है क्या आपका ऑपरेटिंग सिस्टम है? मुझे यकीन नहीं है कि सी फ़ंक्शन स्ट्रैट कैसे प्रतिक्रिया करता है, लेकिन मुझे पता है कि समकक्ष डेल्फी फ़ंक्शन ऑपरेटिंग सिस्टम की सेटिंग्स को ध्यान में रखता है। कुछ भाषाओं (फ्रेंच, जर्मन, ...) "।" के बजाय "," का उपयोग करें। दशमलव विभाजक के रूप में।

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