עבור לתוכן

שאלה | שפת C עזרה בכתיבת תכנית לחישוב שעות עבודה

Featured Replies

פורסם

לדעתי דווקא כדאי להשתמש במחרוזות זה ממש שטויות

בסה"כ מחליפים את הscanf בgets ובודקים את התו האחרון וממירים לint זה שינוי קטנטן יחסית בקוד

ללמוד מחרוזות זה כמה דקות זה באמת משהו קטן

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

בסה"כ מחליפים את הscanf בgets ובודקים את התו האחרון וממירים לint זה שינוי קטנטן יחסית בקוד

ללמוד מחרוזות זה כמה דקות זה באמת משהו קטן

בא לך להסביר לי או להביא לי מקור טוב ללמוד ממנו

פורסם

על כמעט כל שאלה ספציפית שיש לך, אני ממליץ לך לבצע חיפוש ב-stackoverflow.

לרוב תקבל שם גם הסברים מעולים וגם דוגמאות.

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

בסה"כ מחליפים את הscanf בgets ובודקים את התו האחרון וממירים לint זה שינוי קטנטן יחסית בקוד

ללמוד מחרוזות זה כמה דקות זה באמת משהו קטן

דווקא לא צריך. הפתרון הזה שהצעת:

scanf("%d%c", &hours, &type);

הוא פתרון מעולה. אם המשתמש לא הכניס שום אות אחרי השעות אז type יכיל את הרווח/אנטר שהמשתמש הקיש אחרי המספר.

פורסם

אז זהו שאני לא בטוח שהוא יקבל את האינטר, עבר הרבה מאוד זמן מאז שהשתמשתי ב-scanf עם ניואנסים כאלה

פורסם

הוא יקבל.

כשמעבירים c% ל-scanf אז הוא תמיד קורא תו אחד, בדיוק כמו ב-getc, בלי לדלג על רווחים (בניגוד ל-d% לדוגמה שכן מדלג על רווחים).

פורסם
  • מחבר
הוא יקבל.

כשמעבירים c% ל-scanf אז הוא תמיד קורא תו אחד, בדיוק כמו ב-getc, בלי לדלג על רווחים (בניגוד ל-d% לדוגמה שכן מדלג על רווחים).

עכשיו הכל התחרבש לי :S

#include <stdio.h>] 
#define FULL_SHIFT 8


int main()
{
int shift, sum = 0, c,hours,extra=0,weekend=0;
char type;

printf("Enter the number of shift worked\n");
scanf("%d", &shift);

printf("Enter number of hours worked\n");

for (c = 1; c <= shift; c++)

{
scanf ("%d,%c", &hours, &type);
if ( hours > FULL_SHIFT )
{
extra = extra + hours - FULL_SHIFT;
sum = sum + FULL_SHIFT;
}
else if (hours + type)
{
weekend = weekend + hours;
}
else
{
sum = sum + hours;
}


}


printf("Sum of entered hours worked = %d\n",sum);
printf("Sum of Overtime hours worked = %d\n",extra);
printf("sum of weekend hours worked = %d\n",weekend);

return(1);
}

פורסם

"התחרבש" זה לא כ"כ אינפורמטיבי. מה הבעיה?

פורסם

א. מאיפה הגיע הפסיק ב-scanf? תבין ש-scanf היא פקודה רגישה וכל תו קטן במקום הלא נכון יגרום לא לעבוד לא טוב. נתנו לך דוגמה מדויקת איך להשתמש ב-scanf.

ב. כבר שאלתי אותך קודם, מה הלוגיקה בשורה הזו?

[COLOR=#333333]       else if (hours + type)[/COLOR]

פורסם
  • מחבר
א. מאיפה הגיע הפסיק ב-scanf? תבין ש-scanf היא פקודה רגישה וכל תו קטן במקום הלא נכון יגרום לא לעבוד לא טוב. נתנו לך דוגמה מדויקת איך להשתמש ב-scanf.

ב. כבר שאלתי אותך קודם, מה הלוגיקה בשורה הזו?

[COLOR=#333333]       else if (hours + type)[/COLOR]

א.תוקן

ב.כבר עניתי לך אין לי מושג מה לרשום אחרי הELSE IF..

פורסם

אתה צריך לבדוק אם המשתמש הכניס את התו S. איך עושים את זה בקוד? מה מכיל המשתנה type?

פורסם

אתה רוצה להכניס שם איזשהו תנאי בוליאני, כלומר ביטוי עם הערכים true או false. למשל X גדול מ- 10 או char שווה לתו 'a'.

בשפה c כל ערך מספרי שווה ל-true למעט 0 שמייצג false

פורסם
  • מחבר
אתה רוצה להכניס שם איזשהו תנאי בוליאני, כלומר ביטוי עם הערכים true או false. למשל X גדול מ- 10 או char שווה לתו 'a'.

בשפה c כל ערך מספרי שווה ל-true למעט 0 שמייצג false

רמז עבה מאוד

הבנתי אני אתקן ואסיף את הקוד

חשבתי שהבנתי אבל עדיין לא מסתדר לי

אני צריך לעשות if type(1)?

פורסם
  • מחבר

#include <stdio.h>

#define FULL_SHIFT 8


int main()
{
int shift, sum = 0, c,hours,extra=0,weekend=0;
char t;


printf("Enter the number of shift worked\n");
scanf("%d", &shift);


printf("Enter number of hours worked\n");


for (c = 1; c <= shift; c++)


{
scanf ("%d %c", &hours, &t);
if ( hours > FULL_SHIFT )
{
extra = extra + hours - FULL_SHIFT;
sum = sum + FULL_SHIFT;
}
else if (t=1)
{
weekend = weekend + hours;
}
else
{
sum = sum + hours;
}


}


printf("Sum of entered hours worked = %d\n",sum);
printf("Sum of Overtime hours worked = %d\n",extra);
printf("sum of weekend hours worked = %d\n",weekend);
getch();
return(1);
}

עכשיו הוא לא מחשב נכון את השעות נוספות...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים