itai2k פורסם 2012 ביוני 15 Share פורסם 2012 ביוני 15 שלום, אני לא מצליח להבין בדיוק מה הבעיה, אשמח אם תעזרו לי#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>int numberToLetter(int *numbers[40], char *letters[40][20]);int main(int argc, char *argv[]){ FILE *inputf; FILE *outputf; int i=0; char letters[40][20]={0}; int numbers[40]={0}; if(argc > 2) /* more then 2 names */ { printf("Eror! You cant enter more then 2 names./n Goodbye!/n"); exit(0); } if(argc==0) /* no names */ { if(!(inputf=fopen("standardInput.txt","r"))) { printf("Cannot open standardInput file\n"); return 0; } if(!(outputf=fopen("standardOutput.txt","w"))) { printf("Cannot open standardOutput file\n"); return 0; } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",numbers[i]); i++; } } if(argc==1) /* if one name */ { if(!(inputf=fopen(*(argv+1),"r"))) { printf("Cannot open input file\n"); return 0; } if(!(outputf=fopen("standardOutput.txt","w"))) { printf("Cannot open standardOutput file\n"); return 0; } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",numbers[i]); i++; } } if(argc==2) /* if two names */ { if(!(inputf=fopen(*(argv+1),"r"))) { printf("Cannot open input file file\n"); return 0; } if(!(outputf=fopen(*(argv+2),"w"))) { printf("Cannot open output file\n"); return 0; } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",numbers[i]); i++; } } numberToLetter(numbers[40],letters[40][20]);}int numberToLetter(int *numbers[40], char *letters[40][20]){ int i=0,ahadot,asarot; char firstWord[10][6]={"one","two","three","four","five","six","seven","eight","nine","ten"}; char tenPlus[10][10]={"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","seventeen","eighteen","nineteen"}; char secondWord[10][8]={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; while(numbers[i]!=NULL) { if(*numbers[i]==0) letters[i][20]="zero"; if(*numbers[i]<11 && *numbers[i]>0) letters[i][20]=firstWord[*numbers[i]-1]; if(*numbers[i]>10) { ahadot=*numbers[i]%10; asarot=*numbers[i]/10; if(ahadot==0) letters[i][20]=secondWord[asarot-1]; else scanf(*letters[i],"%s" "%s",secondWord[asarot-1],firstWord[ahadot-1]); } }}זה רושם לי על השורה הזאת:numberToLetter(numbers[40],letters[40][20]); את זה: "**argument of type int is incompatible with parameter of type "int * argument of type char is incompatible with parameter of type "char*(*)[20]"מטרת הפוקנציה numberToLetter בעצם לקחת מספרים מהמערך Numbers ולהפוך אותם למילים בתוך המערך letters .. קישור לתוכן שתף באתרים אחרים More sharing options...
Gil28 פורסם 2012 ביוני 15 Share פורסם 2012 ביוני 15 שים לב שאתה שולח מצביע למערך בחתימת הפונקציה ואילו אתה שולח מערך. קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 15 מחבר Share פורסם 2012 ביוני 15 תודה, כן שיחקתי עם זה קצת לראות אם אני עולה על זה ולא הצלחתי.... שניתי מה שאמרת וזה עדיין לא עובד.. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 ביוני 15 Share פורסם 2012 ביוני 15 נתייחס שניה לפרמטר הראשון שאתה מעביר לפונקציה. הפונקציה מצפה לקבל [40]int *numbers, דהיינו מצביע למערך (בגודל 40, אבל זה לא ממש משנה). מצד שני, מה שאתה מעביר לפונקציה הוא [numbers[40, דהיינו האיבר ה-40 במערך numbers, שהוא int. כמו ש-Gil28 אמר, אתה צריך לשלוח מצביע למערך. קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 16 מחבר Share פורסם 2012 ביוני 16 אוקיי תודה,זאת אומרת לעשות מצביעים עוד במיין ושלוח אותם לפונקציה והפונקציה תקבל מערכים? או לשלוח לפונקציה את המערכים ולקבל בפונקציה כמצביעים? *pl=letters[0][0]; *pi=numbers[0]; numberToLetter(pi,pl);}int numberToLetter(int numbers[40], char letters[40][20]) קישור לתוכן שתף באתרים אחרים More sharing options...
Gil28 פורסם 2012 ביוני 16 Share פורסם 2012 ביוני 16 לא. אתה כנראה חדש בנושא ולכן הייתי מציע לך לקרוא קצת אודות מצביעים, מערכים ופונקציות.מאחר ובשפת C כאשר אתה שולח מערך בתור פרמטר, הפונקציה למעשה מקבלת מצביע לאיבר הראשון.מהסיבה הזאת, הפונקציה צריכה לקבל את המערך ובאופן כללי גם את הגודל שלו.במקרה של מערך דו מימדי, תצטרך לשלוח את הגודל של שני המימדים.החתימה צריכה להיראות ככה:int numberToLetter(int numbers[], char* letters, int sizeX, int sizeY)הקריאה לפונקציה צריכה להיראות:numberToLetter(numbers,letters,40,20);והגישה לאיברים צריכה להתבצע:numbers[0] = 0;letters[5*sizeX + 3] = 0;כך אתה מאפס את האיבר הראשון ב-numbers ומאפס את האיבר [letters[3][5. קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 16 מחבר Share פורסם 2012 ביוני 16 ממש תודה, עזרת לי מאוד! האם יש לך מדריך או אתר טוב שמסביר על הנושא? קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 16 מחבר Share פורסם 2012 ביוני 16 אגב איך אני מציב? נאמר ואני רוצה להציב את המילה zero ב letters ? אני לא יכול לעשות:letters[i][0]="zero"; קישור לתוכן שתף באתרים אחרים More sharing options...
innak פורסם 2012 ביוני 16 Share פורסם 2012 ביוני 16 letters זה מערך של char לכן לא תוכל להציב שם מצביע ל-char, המחרוזת שאתה מעוניין להציב היא מסוג char* ולא מסוג char.ב-C מחרוזת מיוצגת ע"י מערך של char-ים, לכן בשביל להציב מחרוזות אתה צריך מערך מסוג מצביע ל-char. קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 17 מחבר Share פורסם 2012 ביוני 17 אוקיי הבנתי, אז הדרך היחידה שיש זה: letters[0*sizeX + i] = 'z'; letters[1*sizeX + i] = 'e'; letters[2*sizeX + i] = 'r'; letters[3*sizeX + i] = 'o'; ? קישור לתוכן שתף באתרים אחרים More sharing options...
Gil28 פורסם 2012 ביוני 17 Share פורסם 2012 ביוני 17 אתה מוזמן להדפיס את המערך ולראות מה יצא קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 17 מחבר Share פורסם 2012 ביוני 17 זה בכלל לא עובד... האם תוכל לעזור לי? אני מאוד מתקשה עם עניין המצביעים..מעבר למערך letters אני צריך לעשות מערך שהוא מצביע? נאמר [char *p[40ולכוון כל תא ב p לתא ב letters? ואז כדי להציב את המילה zero כיצד אבצע זאת? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 ביוני 17 Share פורסם 2012 ביוני 17 עם כל הכבוד, נראה שקפצת קצת יותר מדי קדימה. כדאי קודם כל שתבין בכלל איך מתעסקים עם מחרוזות, איזה פונקציות לטיפול במחרוזות השפה מספקת לך (כגון strcpy, strlen). באיזו מסגרת אתה לומד? מאיפה התרגיל הזה? קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 17 מחבר Share פורסם 2012 ביוני 17 היי,אני לומד באוניברסיטה הפתוחה, אני יודע מה עושות הפונקציות שאמרת... אבל תקן אותי אם אני טועה, אני לא רואה סיבה להשתמש בהם בתרגיל הזהמה דעתך על הקוד שרשמתי?איך לפי דעתך הכי טוב להפוך מספרים (0-99) למילים? קישור לתוכן שתף באתרים אחרים More sharing options...
Gil28 פורסם 2012 ביוני 17 Share פורסם 2012 ביוני 17 למה הכוונה להפוך מספרים למילים?לפי השאלה ששאלת קודם, נראה שאין לך מושג מה זה בדיוק *char ואיך מתנהל כל העניין של מצביעים ומערכים. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.