سؤال

تم إعطاؤنا مهمة تشارك في المعلومات من ملف وتخزين البيانات في صفيف. يتم فرز البيانات الموجودة في الملف على النحو التالي

نيويورك 40 43 N 74 01 ث

أول 20 حرفا اسم المدينة تليها خطوط الطول والعرض. يجب أن يكون خط الطول والعرض سهلا مع عدد قليل

fscanf(infile, "%d(أو %c اعتمادا على أي واحد أحصل عليه)", pointer)

العمليات حتى أنها لن تكون مشكلة.

مشكلتي هي أنني لا أعرف كيفية جمع السلسلة لاسم المدينة لأن بعض أسماء المدن لديها مسافات. قرأت شيئا عن استخدام المحددين ولكن من ما قرأته، يبدو أنه يستخدم أكثر من قراءة خط كامل. هل هناك أي طريقة لقراءة اسم المدينة من ملف وتخزين الاسم بالكامل مع مسافات في صفيف حرف؟ شكرًا.

هل كانت مفيدة؟

المحلول

scanf() يمكن أن تأخذ كمية محدودة من الشخصيات مع "%c" المواصفات.

اهتمام لن يضيف بايت فارغة.

char cityname[21];
scanf("%20c%d%d %c%d%d %c", cityname,
      &lat1, &lat2, &lat_letter,
      &lon1, &lon2, &lon_letter);
cityname[20] = 0;

لكنك أفضل حالا باستخدام fgets() وتحليل السلسلة "يدويا". وإلا فسوف يكون لديك مشاكل نهاية الخط

نصائح أخرى

إليك تلميح: مع مسافات كمسيحك الوحيد، كيف تروي fscanf() حيث يبدأ اسم المدينة ويبدأ خط العرض؟ أنت تقترب من "يبدو وكأنه يستخدم أكثر لقراءة خط كامل". استكشاف ذلك، ربما مع fgets().

g'day،

أثناء مسح المسح الضوئي حتى الرقم الأول، فإن خط العرض، لأن اسم مدينتك ربما يستخدم فحصا لغير الأرقام للعنصر الأول؟

إذا كانت لديك مسافات في اسم مدينتك، فأنت إما تحتاج إلى استخدام محددات أو تحديد حقل اسم المدينة ليكون ثابتا. خلاف ذلك تحاول تحليل اسم مدينة ثلاث كلمات، مثل "سولت ليك سيتي"، سيقتل المجال التالي.

فقط تلميح: اقرأ السطر بأكمله في الذاكرة ثم خذ أول 20 حرفا لاسم المدينة، وهو التالي، على سبيل المثال 10 chars ل latitude وما إلى ذلك.

يمكنك تحديد الحجم ل %c والتي سوف تجمع كتلة من الأحرف من الحجم المحدد. في قضيتك، إذا تم وضع اسم المدينة 20 حرفا %20c داخل شكل خط scanf.

ثم عليك وضع المنهي في النهاية وتقليم السلسلة.

من "man fgets":

char * fgets (char * s، حجم int، ملف * دفق)؛

يقرأ FGENTS () في أكثر من الأحرف الأقل من حجم الأحرف من تيار ويخزنها في المخزن المؤقت توقف القراءة بعد eof أو جديد. إذا تم قراءة NEWLINE، يتم تخزينها في المخزن المؤقت. يتم تخزين " 0" بعد الحرف الأخير في المخزن المؤقت.

FGENTS () إرجاع S على النجاح، وبعد خطأ أو عند حدوث نهاية الملف أثناء عدم قراءة أحرف.

هذا يعني أنك بحاجة إلى مجموعة من Arch Char من 21 حرفا لتخزين سلسلة 20 Char (سيكون الحادي والعشرون المحدد " 0" في النهاية، وسوف تضعه تلقائيا).

حظا طيبا وفقك الله!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top