سؤال

انا حاليا معيد عن مقدمة ج فئة.فئة تدرس باستخدام Visual Studio, ولكن عندما الدرجات أنا فقط استخدام بسيط ويندوز دفعة النصي إلى عملية احالة الطلبات ، ترجمة لهم تشغيلها على ملف الاختبار و إعادة توجيه الإخراج إلى سلسلة من الملفات النصية أستطيع طباعة, علامة, واليد العودة إلى الطلاب.العملية برمتها يعمل بشكل جيد جدا, باستثناء حقيقة أنه عندما كنت إعادة توجيه stdin ، فإنه لا يظهر في توجيهها المعياري بنفس الطريقة التي تتعامل بها عند نفس المدخل يتم كتابتها مباشرة إلى وحدة التحكم.بسبب هذا, إخراج مدونة منسقة وحدة التحكم لا يتم عرض بشكل صحيح في توجيه الإخراج.الملف التالي مقتطفات تظهر هذه المشكلة.لا أحد يعرف من حل بسيط ؟

ملف:على سبيل المثال.ج

#include <stdio.h>

int main()
{
    int v;
    printf("Enter a number: ");
    scanf("%i", &v);
    printf("You entered: %d\n", v);
    return 0;
}

ملف:input.txt

42

الإخراج (وحدة التحكم)

C:\>example.exe
Enter a number: 42
You entered: 42

C:\>

الإخراج (إعادة التوجيه)

C:\>example.exe < input.txt > output.txt

C:\>more output.txt
Enter a number: You entered: 42

C:\>
هل كانت مفيدة؟

المحلول

هذا هو المتوقع (الصحيح) السلوك.الإدخال أبدا جزءا من stdout.إذا كنت تفعل example.exe > output.txt و عمياء اكتب في 42, يجب أن تتوقع أن 42 كما يظهر مرة واحدة فقط في الإخراج.

الحل الوحيد الذي كنت أفكر فيه هو أن المحطة/قذيفة سجلات الدورة ككل.ويندوز command shell هو غير قادر على ذلك.يمكن أن تكتب الخاصة بك محطة الوكيل على الرغم من الذي يغذي ستدين إلى الطالب البرنامج يقرأ الإخراج نفسه ، في حين أن الكتابة سواء في الجمع بين الموضة.فمن السهل جدا أن شوكة على exection من برنامج آخر و توجيه هذا المدخل/تحت POSIX (المقدمة لك من قبل Cygwin), أنا لا أعرف عن سهل دوس/ويندوز على الرغم من.

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