שאלה קטנה בC בסיסי:

  • פותח הנושא neko
  • פורסם בתאריך

neko

New member
שאלה קטנה בC בסיסי:

כתבתי את הקטע:
while(true) { scanf("%d", &x); printf("%d returns %d\n", x, func(x)); }​
ואני רוצה שכאשר המשתמש ילחץ ENTER, הקטע יפסיק לקבל מספרים, ויסיים את התוכנית (כלומר, שהמשתמש יוכל להכניס פשוט רצף כמו 10 20 30 40 50 וללחוץ ENTER, ואז יקבל את התשובה במרוכז והתוכנית תסתיים). יש אפשרות כזו?
 

erezsh

New member
פשוט

תקרא את הקלט כמחרוזת ואז תעשה לה parse (פשוט למדי, במיוחד אם הם מופרדים רק ע"י רווחים).
 

erezsh

New member
מה???

אני בכלל לא אמרתי באיזו פונקציה להשתמש!
 

זהיר

New member
אז אהיה מפורש יותר

כשהוא שואל על SCANF ואתה עונה "לקלוט כמחרוזת" זה מתפרש כהצעה לבצע
scanf("%s", str);​
שגם לא בטוח וגם לא יקלוט הכל (כי עוצר ברווחים). שימוש ב () GETS גרוע לא פחות. הפתרון הסביר: שימוש ב FGETS ואחר-כך ב SSCANF תכנתו בזהירות
 

Elius2

New member
mmmm....

Dont think you need a loop here. Define a string, get your numbers to it. Lets say the input was "10 20 30 40" Do split on the string (split space " ") and it will turn it into an array, get the values from this array and turn it into an array of integers and run your function.​
 

neko

New member
זה גם מה שאני חשבתי לעשות,

קיוויתי שיש לכם פתרון יותר אלגנטי. האם זה יעבוד להוסיף GETCHAR מייד אחרי הSCANF שיבדוק אם אחרי המספר נכנס '\n', או שהוא "יגנוב" חלק מהספרות של המספרים?
 

neko

New member
מקפיץ מקפיץ ../images/Emo105.gif ...

זה בכ"ז שיעורי בית למחר, ואני לא רוצה לכתוב פונקציות PARSE אם אני לא חייב...
 
למעלה