שאלה ב- C

andav

New member
שאלה ב- C

שאלתי היא כזו: יש את הקוד הבא:
#include <stdio.h> /* copy input to output; 2nd version */ main() { int c; while ((c = getchar()) != EOF) putchar(c); }​
איך אני מגיע ל- EOF,כלומר שהתוכנית תסתיים? הדפסתי את EOF והערך שלו זה 1- ,ניסיתי להכניס 1- אבל התוכנית ממשיכה. ניסיתי לשים את EOF בעצמו ,אבל עדיין התוכנית ממשיכה. בקיצור,איך מסיימים את התוכנית שלא בצורה כוחנית,אלא שפשוט הלולאה תסתיים ואז, גם התוכנית. תודה רבה.
 

HaRmosh

New member
EOF, במקרה זה, יהיה ctrl+z.

תנסה ותראה שם תלחץ ctrl+z התוכנית תצא. זה שהכנסת 1- לא עזר כי הוא הריץ פעמיים את הלולאה - פעם על '-' ופעם על '1', שלשניהם ערכי ASCII, ולכן הם לא יכולים להיות שליליים, בטח שלא 1-.
 

andav

New member
תודה + שאלה

בשביל לבדוק את העניין,אני מעוניין לקלוט את ctrl z ולהשוות אותו ל- EOF,יש לך מושג איך קולטים את ctrl ומוסיפים לו את ה- Z?
 

צבתות

New member
חמוד, לא הבנת

אתה לא משנה כלום בתוכנית. רק כשאתה מסיים להכניס את הקלט אתה לוחץ ctrl+Z. נניח שהקלט שלך הוא abc אז מיד אחרי ה-c, אתה מקיש ctrl+z.
 

andav

New member
כן, תודה, אני אסביר יותר טוב

אני מעוניין לראות את זה בעיניים שלי , ש- ctrl z == EOF, לכן אני רוצה להכניס תנאי שכאשר אני אלחץ ctrl z אני אשאל האם זה שווה ל- EOF ואם כן(אני מבין שזה כן)שידפיס לי משהו ואז שהתוכנית תצא. עכשיו,שאלתי היא איך אני "תופס" את ctrl z?. תודה
 

HaRmosh

New member
??

התנאי של הלולאה שלך עושה בדיוק את זה... תעשה שישר אחרי גוף הלולאה תבוא הדפסה, או מה שתרצה, כי היא תסתיים רק אם הכניסו ctrl+z...
 

andav

New member
הנה התוכנית

#include <stdio.h> #include<conio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { char c; int flag = OUT; while((c = getchar()) != EOF) { if(c == ' ' || c == '\t' || c == '\n') { if(flag == IN) { //putchar(c); putchar('\n'); flag = OUT; } } else { putchar(c); flag = IN; } } printf("GoodDay"); getch(); }​
מדוע ההדפסה לא מופיעה? מה שקורה זה שאני לוחץ ctrl z פעם אחת ולא קורה כלום. אני לוחץ פעם שנייה ואז התוכנית יוצאת.
 

vinney

Well-known member
ככה זה עם getchar

נסה FFLUSH(NULL) בתוך הלולאה, תראה אם זה פותר את הבעיה. ולא לקפוץ עליי, אמרתי "נסה"
 

andav

New member
לא הייתי קופץ,זה בסדר ../images/Emo13.gif

בכל מיקרה, זה לא עובד. אגב זה מה שניסיתי(לפי הדרכתך):
#include <stdio.h> #include<conio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { char c; int flag = OUT; while((c = getchar()) != EOF) { if(c == ' ' || c == '\t' || c == '\n') { if(flag == IN) { //putchar(c); putchar('\n'); flag = OUT; fflush(NULL); } } else { putchar(c); flag = IN; fflush(NULL); } } printf("GoodDay"); getch(); }​
תוכל לפרט מדוע זה קורה? תודה
 
למעלה