سؤال

وأنا أحاول أن تطابق خطوط مع الشكل مثل "نقطة٪ د٪ د". لذلك أنا بحاجة لاثنين فقط من تلك الأعداد الصحيحة اثنين، ثم "نقطة" هي الثابت تلوينها في سلسلة التنسيق. كما فهمت قراءة صفحات الرجل لينكس من scanf، وهذا يجب أن تعمل بشكل صحيح.

والرمز القادم، والطريقة التي أريد للاستخدام، وأول دعوة لscanf الأعمال، ولكن في المكالمات التالية scanf عودة مع رمز الخطأ وعدم اتخاذ المزيد من الأرقام من ستدين (scanf لا يمنع انتظار المزيد من المدخلات من ستدين):

for (;;)
{
    scanf("point %d %d", &x, &y);
    printf("=> point %d %d\n", x, y);
}

في هذه الطريقة، عمل كل شيء كما هو متوقع:

    int x, y;
    char s[10];

    for (;;)
    {
        scanf("%s %d %d", s, &x, &y);
        printf("=> point %d %d\n", x, y);
    }

وأي اقتراح حول ما يمكن أنا سوء الفهم؟

وشكرا.

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

المحلول

لا يزال هناك بيانات غير المستهلكة مثل أحرف نهاية الخط في stdin التي تجعل بمسح القادمة لوقف مع غير المباراة. في النسخة الثانية يحصل تستهلك هذه البيانات في نهاية خط من قبل %s.

وأقترح عليك fgets إلى منطقة عازلة أولا ثم sscanf ذلك. ولا تحقق القيم عودتك.

نصائح أخرى

وتخميني هو أن كنت لا يعطيها الإدخال الصحيح. على سبيل المثال فإن هذه المدخلات لا تعمل:

4 5

وهذا يجب أن تعمل:

point 4 5

وأنت لم تذكر رمز الخطأ، ولكنه ربما تقول أنك لم تتبع شكل صحيح (أي وضع في نقطة قبل أرقام).

وكممارسة البرمجة الجيدة يجب مسح الإدخال القياسي قبل اتخاذ مدخلات من المستخدم.

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