iakovl פורסם 2004 בדצמבר 16 Share פורסם 2004 בדצמבר 16 בבדיקת שגיאות מופיעות הבעיות הבאותואין לי מושג איך לפתור אותם:--------------------Configuration: 3+ - Win32 Debug--------------------Compiling...3++.cppC:\Documents and Settings\\3++.cpp(56) : error C2065: 'itoa' : undeclared identifierC:\Documents and Settings\\3++.cpp(69) : error C2440: 'return' : cannot convert from 'char [4]' to 'char' This conversion requires a reinterpret_cast, a C-style cast or function-style castC:\Documents and Settings\\3++.cpp(76) : error C2065: 'atoi' : undeclared identifierError executing cl.exe.3++.obj - 3 error(s), 0 warning(s)הקובץ מצורף[attachment deleted by admin - 90 dayss] קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בדצמבר 16 Share פורסם 2004 בדצמבר 16 itoa מוצהר בתוך stdlib.h, אם הייתי קורא את ה-help שלו היית רואה את זה מיידהפונקציה intToString מוגדרת כמחזירה char ואתה מחזיר char[4], זה כתוב לך במדוייק בהודעת שגיאה, לא קשה להבין.atoi בדיוק כמו itoaרק לידע כללי - itoa זה לא anci-s ולכן קומפיילר c טהור לא יכיר בפונקציה הזאת. קישור לתוכן שתף באתרים אחרים More sharing options...
iakovl פורסם 2004 בדצמבר 16 מחבר Share פורסם 2004 בדצמבר 16 כבר תוקן אבל יש בעיה בהרצה של התוכנית עצמה היא מתחילה לרוץ ואז מצורף הקובץ המתוקן [attachment deleted by admin - 90 dayss] קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בדצמבר 16 Share פורסם 2004 בדצמבר 16 תלמד לעבוד עם debuger ותמצא את הבעיה די בקלות קישור לתוכן שתף באתרים אחרים More sharing options...
liran_oz פורסם 2004 בדצמבר 18 Share פורסם 2004 בדצמבר 18 בדקתי חלקית רק את פונקציית הקידוד ולמה היא נתקעת. אז ככה: בפונקצייה intToString אתה נותן פרמטר מטיפוס INT ומחזיר כתובת למחרוזת בזיכרון (מצביע), הטעות שלך במקרה הזה היא שטווח ההכרה של המחרוזת (str) נמצא רק בפונקצייה intToString וכאשר אתה מעביר ממנה מצביע לפונקציית Coder אתה בעצם מעביר כתובת שכבר לא בשימוש, דבר שגורם לקריסה של תוכניות במצב מוגן (בו יש שימוש בזיכרון שלא הוקצה). פתרון אחד הוא להקצות את משתנה str גלובלי, מה שלא מומלץ לעשות. מה שאני עשיתי זה ליצור משתנה str בתוך פונקציית Coder ולהעביר את הכתובת שלו לפונקציית intToString. השתדלתי לשנות כמה שפחות בקוד שלך. התיקון שלי: void intToString(int ascii, char *str){ char onezero[4],dublezero[4]; strcpy(onezero,"0"); strcpy(dublezero,"00"); itoa(ascii,str,10); //converts numeric to string if(ascii<10) //in case numeric is is one digit { //adds two zero's in order to make it strcat(dublezero,str); // a 3 digit string strcpy(dublezero,str); } else if(ascii<100) //in case numeric is is one digit { //adds one zero's in order to make it strcat(onezero,str); // a 3 digit string strcpy(dublezero,str); }}....void coder( FILE * adress , FILE * newAdress){ char str[5]; printf("\nstart coding\n"); char ch; fflush (stdin); while (ch != EOF) { ch = fgetc(adress); if(ch != EOF) { intToString(charToAscii(ch), str); fprintf(newAdress,"%s",str); } }} יש עוד דברים שאפשר לשפר ולייעל בקוד, לדוגמא, אין צורך להעביר את ערך הAscii למחרוזת, אם אתה משתמש ב fprintf תשתמש ב c% במקום s%. בהצלחה קישור לתוכן שתף באתרים אחרים More sharing options...
iakovl פורסם 2004 בדצמבר 18 מחבר Share פורסם 2004 בדצמבר 18 תיקנתי עכשיו זה רץולדעתי זה רץ נכון בקידוד אבל בהסרת קידוד יש בעיהקידדתי את המחרוזת הבאה :"abcd"והקידוד היה "979899100"אבל בהסרת הקידוד הוא נתן רק "a"מוזר[attachment deleted by admin - 90 dayss] קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בדצמבר 18 Share פורסם 2004 בדצמבר 18 צרך את הקוד המתוקן מחדשאתה משתמש ב-strcat ו-strcpy בכיוון הלא נכון, התוצאה נכנסת לפרמטר השמאלי. הפורמט הנכון הואstrcpy(destination,string) קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.