שניצל פורסם 2012 ביוני 18 Share פורסם 2012 ביוני 18 אז תדבג את התכנית ותחפש איפה הבעיה. קישור לתוכן שתף באתרים אחרים More sharing options...
itai2k פורסם 2012 ביוני 19 מחבר Share פורסם 2012 ביוני 19 טוב סוף סוף סיימתי את העבודה, תודה לכולם, לשניצל ו Gil28 על התמיכה! הנה הקוד סתם למי שמועניין או שבעתיד נתקל בזה: #include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>int numberToLettersFile(int num,FILE *out);int numberToLetters(int num);/* Program that change the numbers to word in range of 0-99. *//* The user has 3 optios: *//* Option one: enter numbers manually as a standard input and get the words as a standard output by running the program: ./numbers *//* Option two: get numbers from file and get the word as a standard output by running the program: ./numbers in.txt *//* Option tree: get numbers from input file and get the output on other file by running the program: ./numbers in.txt out.txt */int main(int argc, char* argv[]){ FILE *inputf, *outputf; int i=0,num=0; char line[100]={0}; char *temp; int numbers[100]={0}; int counter; if(argc > 3) /* more then 2 names */ { fprintf(stderr,"Eror! You cant enter more then 2 names.\n Goodbye!\n"); exit(0); } if(argc==1) /* no names - regular input and output */ { printf("please enter numbers between 0-99:\n"); gets(line); /* put the number in a string named 'line' */ temp = strtok(line," "); /* sparte the numbers and put them in the arry named 'numbers' */ while(temp!=NULL) { num=atoi(temp); numbers[i]=num; i++; counter++; temp = strtok(NULL," "); } for(i=0;i<counter-1;i++) /* send the numbers to the func numberToLetters the get them as a word */ numberToLetters(numbers[i]); printf("\nCommand successfull!\nGood Bye!\n\n"); } if(argc==2) /* if one name - input from file and a regular output */ { if(!(inputf=fopen(argv[1],"r"))) { perror("Cannot open input file\n"); exit(0); } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",&numbers[i]); i++; counter++; } for(i=0;i<counter-2;i++) /* send the numbers to the func numberToLetters the get them as a word */ numberToLetters(numbers[i]); printf("\nCommand successfull!\nGood Bye!\n\n"); fclose(inputf); } if(argc==3) /* if two names - get the numbers from file and put the word in another file */ { if(!(inputf=fopen(argv[1],"r"))) { perror("Cannot open input file file\n"); exit(0); } if(!(outputf=fopen(argv[2],"wt"))) { perror("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++; counter++; } for(i=0;i<counter-1;i++) /* send the numbers to the func numberToLettersFile the get them as a words inside the file*/ numberToLettersFile(numbers[i],outputf); printf("\nCommand successfull!\nGood Bye!\n\n"); fclose(inputf); fclose(outputf); } return 0;}int numberToLettersFile(int num,FILE *out) /* get the numbers and put them inside an output file as a words */{ int ahadot,asarot; 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"}; if(num>=0 && num<=10) /* if number between 0-10 */ { fprintf(out,"%s \n",firstWord[num]); } if(num>10 && num<20) /* if number between 11-19 */ { fprintf(out,"%s \n",tenPlus[(num%10)-1]); } if(num>19 && num<100) /* if number between 20-99 */ { ahadot=num%10; asarot=num/10; if(ahadot==0) fprintf(out,"%s \n",secondWord[asarot-2]); else fprintf(out,"%s %s\n",secondWord[asarot-2],firstWord[ahadot]); }return 0; }int numberToLetters(int num){ int ahadot,asarot; 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"}; if(num>=0 && num<=10) /* if number between 0-10 */ { printf("%s \n",firstWord[num]); } if(num>10 && num<20) /* if number between 11-19 */ { printf("%s \n",tenPlus[(num%10)-1]); } if(num>19 && num<100) /* if number between 20-99 */ { ahadot=num%10; asarot=num/10; if(ahadot==0) printf("%s \n",secondWord[asarot-2]); else printf("%s %s\n",secondWord[asarot-2],firstWord[ahadot]); }return 0; } קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 ביוני 19 Share פורסם 2012 ביוני 19 יש לך שכפול קוד מטורף - numberToLetters ו-numberToLettersFile זהות לחלוטין למעט הקובץ אליהן הן מדפיסות. תחשוב איך לטפל בזה. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.