c פשוט

809080

New member
c פשוט

שלום אני מנסה לעשות תרגיל פשוט בסי והוא נכנס לי ללופ אינסופי ואני לא מבין למה

התוכנית צריכה לקלוט מספר לא ידוע של מספרים עד שאני מכניס 0 כדי לעצור אותה ואז להגיד לי כמה מספרים היו חיוביים וכמה שלילים



תודה



#include<stdio.h>

void main()
{

int n,p,num;
p=0;
n=0;
printf("enter numbers, end with zero:\n");
num=1;

while(num!=0)
{
printf("enter number:");
scanf("d%",&num);
if(num>0)
p++;
if(num<0);
n--;
}


printf("there are %d positves and %d negatives",p,n);




}
 

Guy Yafe

New member
אני מתפלא שזה מתקמפל לך

בשורה שבה אתה קורא לתוך num כתבת (אני כותב במילים כי תפוז הופך הכל) d ואז אחוז, במקום אחוז ואז d.
עוד טעות שעשית היא לשים נקודה פסיק לאחר התנאי השני. זה אומר שהתנאי יסתיים מיד אחרי הבדיקה, והשורה שאחריו תתבצע בכל מקרה.
אגב, למה אתה מחסיר אחד מ - n ולא מוסיף אחד ל - n?
זו בדיוק הסיבה שגם אם יש שורה אחת אחרי if, תמיד יש לעטוף אותה בסוגריים מסולסלים.

השערה שלי: הקוד בכלל לא מתקמפל לך, ובלי לשים לב אתה מריץ קוד שכתבת בעבר ובטעות אתה לא שם לב שלא החלפת אותו.
 

freak2100

New member
מה פה לא מתקמפל, לדעתך?

שים לב שה-format string זה לא משהו שמתקמפל, זה מתפרסר בזמן ריצה.
 

Guy Yafe

New member
צודק, טעות שלי

בכל מקרה, יכול להיות שזה המקור לטעות (מעבר לכמה טעויות אחרות שהיו בקוד אולם לא גורמות ללולאה אינסופית
 

freak2100

New member
זה בוודאות יגרום לבעיות...

לדעתי זה פשוט לא באמת יחכה לקלט ככה (כי הוא לא יודע שהוא צריך לחכות למספר), ואז זה מאוד הגיוני שהתוכנית תתקע בלולאה אינסופית.
 
למעלה