עבור לתוכן

לא מבין מדוע התכנית מתרסקת לי

Featured Replies

פורסם

היי חברים,

אני צריך לכתוב תכנית שעושה את הדבר הבא:

כתבו פונקציה המקבלת מחרוזת שמייצגת מספר שלם אי-שלילי ומספר נוסף location המייצג מיקום במספר (ניתן להניח שהקלט תקין). הפונקציה תחזיר את ערך הסיפרה במיקום המבוקש. כלומר, עבור location==0 תוחזר סיפרת האחדות, עבור location==1 תוחזר סיפרת העשרות, וכן הלאה.

לדוגמא, קריאה לפונקציה עם המחרוזת "123" והמיקום 0 תחזיר את הערך 3.

זאת התכנית שכתבתי:

#include <stdio.h>
#include <string.h>

int numloc(char *s, int location)
{
return *(s+strlen(s)-location-1)-'0';
}



int main()
{
int num;
char s[4]="123";

printf("Please enter a location\n");
scanf("%d",&num);
printf (findDigit(&s,num));
return 0;
}

הבעיה היא שהתכנית מתרסקת בשלב הפונקציה.

פורסם

א. אתה משתמש ב-printf באופן לא נכון.

ב. למה אתה מעביר s& ל-findDigit?

פורסם
  • מחבר

לגבי הprintf צודק בהחלט!

לא שמתי לב. שחכתי את ה"%d"

לגבי שליחת כתובת המחרוזת, למה אני לא אמור להכניס את &?

תודה רבה!

פורסם

כי מערך הוא כבר מצביע. הטיפוס של s& הוא "מצביע למערך של char", והפונקציה פשוט מצפה ל"מצביע ל-char".

פורסם
  • מחבר

אוקי ובנוגע לאורך מחורזת,

הפקודה strlen מחזירה לי את אורך כל המחרוזת כולל \0?

כלומר מחרוזת שהגדרתי אותה באורך 5 אז האם הפקודות הבאות חוקיות:?

len=strlen(s);

printf("%s",s[len]);

או שאני צריך לכתוב

printf("%s",s[len-1]);

וזה במידה ואני רוצה להדפיס את התו שלפני האפס

פורסם

בנוסף לכל מה שנאמר, שים לב שאתה קורא לפונקציה בשם לא נכון מתוך main

ארכיון

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

דיונים חדשים