سؤال

هل هذا ممكن ؟

دعونا نقول أن الكود لديه الكثير من خطوط SCANF. بدلا من تشغيل وقيم يدويا وإضافة القيم باليد عند تصحيح الأخطاء، هل من الممكن "إطعام" Stdin مع البيانات بحيث عندما يبدأ Scanf في القراءة، سيقرأ البيانات المدخونة دون أي حاجة للتفاعل مع المحطة.

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

المحلول

ضع خطوط الاختبار في ملف، وتشغيل البرنامج مثل هذا:

myprogram < mytestlines.txt

أفضل من اختراق البرنامج الخاص بك إلى بطريقة أو بأخرى نفسها.

عند تصحيح التعليمات البرمجية، يمكنك إعداد المصحح لتشغيله باستخدام سطر الأوامر هذا.

نصائح أخرى

لجعل برنامجك أكثر تنوعا قليلا، قد ترغب في التفكير في إعادة كتابة برنامجك للاستخدام fscanf, fprintf, ، إلخ. حتى أنه يمكن بالفعل التعامل مع الملف IO بدلا من مجرد وحدة التحكم IO؛ ثم عندما تريد أن تقرأ من Stdin أو الكتابة إلى Stdout، فستفعل شيئا فقط على غرار:

FILE *infile, *outfile;

if (use_console) {
    infile = stdin;
    outfile = stdout;
} else {
    infile = fopen("intest.txt", "r");
    outfile = fopen("output.txt", "w");
}
fscanf(infile, "%d", &x);
fprintf(outfile, "2*x is %d", 2*x);

لأن كم مرة تتعامل البرامج فقط مع Stdin / Stdout وعدم السماح بالملفات؟ خاصة إذا انتهى بك الأمر باستخدام برنامجك في البرامج النصية SHELT، فقد يكون الأمر أكثر وضوحا لتحديد المدخلات والمخرجات على سطر الأوامر.

int fd[2];
pipe(fd);
close(0); // 0:stdin
dup(fd[0], 0); // make read pipe be stdin
close(fd[0]);
fd[0] = 0;

write(fd[1], "some text", 9); // write "some text" to stdin
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top