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

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


itai2k

Recommended Posts

שלום, אני לא מצליח להבין בדיוק מה הבעיה, אשמח אם תעזרו לי


#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 ..

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

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

נתייחס שניה לפרמטר הראשון שאתה מעביר לפונקציה. הפונקציה מצפה לקבל [40]int *numbers, דהיינו מצביע למערך (בגודל 40, אבל זה לא ממש משנה). מצד שני, מה שאתה מעביר לפונקציה הוא [numbers[40, דהיינו האיבר ה-40 במערך numbers, שהוא int. כמו ש-Gil28 אמר, אתה צריך לשלוח מצביע למערך.

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

אוקיי תודה,

זאת אומרת לעשות מצביעים עוד במיין ושלוח אותם לפונקציה והפונקציה תקבל מערכים? או לשלוח לפונקציה את המערכים ולקבל בפונקציה כמצביעים?


*pl=letters[0][0];
*pi=numbers[0];
numberToLetter(pi,pl);
}


int numberToLetter(int numbers[40], char letters[40][20])

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

לא. אתה כנראה חדש בנושא ולכן הייתי מציע לך לקרוא קצת אודות מצביעים, מערכים ופונקציות.

מאחר ובשפת 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.

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

letters זה מערך של char לכן לא תוכל להציב שם מצביע ל-char, המחרוזת שאתה מעוניין להציב היא מסוג char* ולא מסוג char.

ב-C מחרוזת מיוצגת ע"י מערך של char-ים, לכן בשביל להציב מחרוזות אתה צריך מערך מסוג מצביע ל-char.

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

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

מעבר למערך letters אני צריך לעשות מערך שהוא מצביע? נאמר

[char *p[40

ולכוון כל תא ב p לתא ב letters? ואז כדי להציב את המילה zero כיצד אבצע זאת?

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

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

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

היי,

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

מה דעתך על הקוד שרשמתי?

איך לפי דעתך הכי טוב להפוך מספרים (0-99) למילים?

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

ארכיון

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


×
  • צור חדש...