לא מצליח לקמפל - שפת C - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

לא מצליח לקמפל - שפת C


itai2k

Recommended Posts

אם הייתי מבין, לא הייתי שואל... :s05:

אני צריך להפוך מספרים למילים, לדוגמא:

1 = one

17 = seventeen

אני פשוט צריך הסבר על מצביעים למערך דו ממדי של char אני לא מצליח להבין איך זה עובד... :kopfpatsch:

אגב החלטתי לא להעביר את המערך של המילים לפונקציה... אלא לבנות את המערך כבר בתוך הפונקציה (numberToLetter)

קישור לתוכן
שתף באתרים אחרים

  • תגובות 47
  • נוצר
  • תגובה אחרונה

תחשוב על מערך דו מימדי כמערך חד מימדי ארוך:

|__|__|__|__||__|__|__|__||__|__|__|__|

11 10 9 8 7 6 5 4 3 2 1 0

בעצם מדובר במערך רגיל באורך 12 המייצג מערך דו מימדי בגודל 3X4 כאשר תאים 0-3 הם השורה הראשונה, 4-7 השורה השנייה וכולי.

אתה יכול להסתכל על תאים 0,4,8 כעל הטור הראשון, הבנת את הרעיון.

עכשיו תחשוב איך אתה מתרגם את ההוראה [2][2]arr לגישה לתא הרצוי במערך הזה, כלומר מצא את j עבורו [2][2]arr[j]=arr

קישור לתוכן
שתף באתרים אחרים

אוקיי תודה...

אני מבין איך נראה מערך דו ממדי... אני פשוט לא מבין איך להעתיק לשם מילה(string) או שכדאי להעתיק אות אות (char)

אגב ראיתי מה שרשום בתרד השני.... האם כדאי לי באמת לקחת char משנה כדי להעתיק לשם את המילים ואז להעתיק למערך?

ואיך בכלל להכניס אותו לתוך המערך? כי אני לא מצליח..

תודה על העזרה! :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

טוב אני חושב שהבנתי תגיד לי אם זה מה שהתכוונת:


if(numbers[i]==0) /* when the number is 0 */
{
strcpy(letters[i],"zero");
}

זאת השיטה כולה:


int numberToLetter(int numbers[])
{
int i=0,ahadot,asarot,j=0,num=0;
char letters[100][20];
char firstWord[11][6]={"zero","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) /* if number between 0-10 */
{
num=numbers[i];
strcpy(letters[i],firstWord[num]);
}


if(numbers[i]>10)
{
num=numbers[i];
ahadot=num%10;
asarot=num/10;
if(ahadot==0)
strcpy(letters[i],secondWord[asarot-1]);
else
scanf(letters[i],"%s" "%s",secondWord[asarot-1],firstWord[ahadot-1]);
}


i++;
}
}

קישור לתוכן
שתף באתרים אחרים

טוב הצליח להתקמפל והכל אבל עכשיו הוא לא מצליח לפתוח את הקבצים...

אני חושב כי ניסיתי להגדיר אותם עוד לפני התוכנית...

האם יש אפשרות להעביר את הקבצים לפונקציה אחרת?

קישור לתוכן
שתף באתרים אחרים

הצלחתי לקמפל, אבל הוא לא מצליח לפתוח את הקבצים... צריך עזרה!!





#include <stdio.h>


#include <stdlib.h>


#include <ctype.h>


#include <string.h>




int numberToLetter();






int main(int argc, char *argv[])
{


FILE *inputf, *outputf;
int i=0;


int numbers[100]={0};




if(argc > 2) /* more then 2 names */


{


fprintf(stderr,"Eror! You cant enter more then 2 names.\n Goodbye!\n");


exit(0);


}




if(argc==0) /* no names */


{


if(!(inputf=fopen("standardInput.txt","r")))


{


fprintf(stderr,"Cannot open standardInput file\n");


exit(0);


}


if(!(outputf=fopen("standardOutput.txt","w")))


{


fprintf(stderr,"Cannot open standardOutput file\n");


exit(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")))


{


fprintf(stderr,"Cannot open input file\n");


exit(0);


}


if(!(outputf=fopen("standardOutput.txt","w")))


{


fprintf(stderr,"Cannot open standardOutput file\n");


exit(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")))


{


fprintf(stderr,"Cannot open input file file\n");


exit(0);


}


if(!(outputf=fopen(*(argv+2),"w")))


{


fprintf(stderr,"Cannot open output file\n");


exit(0);


}


while(!feof(inputf)) /* put all the numbers from the input file to the arry */


{


fscanf(inputf,"%d",&numbers[i]);


i++;


}


}




numberToLetter(numbers,outputf,inputf);
fclose(inputf);
fclose(outputf);
return 0;


}




int numberToLetter(int numbers[],FILE *out)


{


int i=0,ahadot,asarot,num=0;


char letters[100][20];


char firstWord[11][6]={"zero","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])


{


if(numbers[i]>0 && numbers[i]<11) /* if number between 0-10 */


{


num=numbers[i];


strcpy(letters[i],firstWord[num]);


}




if(numbers[i]>10)


{


num=numbers[i];


ahadot=num%10;


asarot=num/10;


if(ahadot==0)


strcpy(letters[i],tenPlus[asarot-1]);


else


scanf(letters[i],"%s" "%s",secondWord[asarot-1],firstWord[ahadot-1]);


}




i++;


}


i=0;


while(letters[i]!=NULL)


{


fprintf(out,"%s",letters[i]);


i++;


}
return 0;
}

קישור לתוכן
שתף באתרים אחרים

אתה בטוח שהקובץ שאתה פותח לקריאה קיים (בתיקייה שממנה התכנית רצה)?

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...