עבור לתוכן

בעיה עם תוכנית שכתבתי , זקוק לעזרה

Featured Replies

פורסם

בבדיקת שגיאות מופיעות הבעיות הבאות

ואין לי מושג איך לפתור אותם:

--------------------Configuration: 3+ - Win32 Debug--------------------
Compiling...
3++.cpp
C:\Documents and Settings\\3++.cpp(56) : error C2065: 'itoa' : undeclared identifier
C:\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 cast
C:\Documents and Settings\\3++.cpp(76) : error C2065: 'atoi' : undeclared identifier
Error executing cl.exe.

3++.obj - 3 error(s), 0 warning(s)

הקובץ מצורף

[attachment deleted by admin - 90 dayss]

פורסם

itoa מוצהר בתוך stdlib.h, אם הייתי קורא את ה-help שלו היית רואה את זה מייד

הפונקציה intToString מוגדרת כמחזירה char ואתה מחזיר char[4], זה כתוב לך במדוייק בהודעת שגיאה, לא קשה להבין.

atoi בדיוק כמו itoa

רק לידע כללי - itoa זה לא anci-s ולכן קומפיילר c טהור לא יכיר בפונקציה הזאת.

פורסם
  • מחבר

כבר תוקן

אבל יש בעיה בהרצה של התוכנית עצמה

היא מתחילה לרוץ ואז :kopfpatsch:

מצורף הקובץ המתוקן

[attachment deleted by admin - 90 dayss]

פורסם

תלמד לעבוד עם debuger ותמצא את הבעיה די בקלות

פורסם

בדקתי חלקית רק את פונקציית הקידוד ולמה היא נתקעת. אז ככה:

בפונקצייה 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%.

בהצלחה

:)

פורסם
  • מחבר

תיקנתי עכשיו זה רץ

ולדעתי זה רץ נכון בקידוד אבל בהסרת קידוד יש בעיה

קידדתי את המחרוזת הבאה :"abcd"

והקידוד היה "979899100"

אבל בהסרת הקידוד הוא נתן רק "a"

מוזר

[attachment deleted by admin - 90 dayss]

פורסם

צרך את הקוד המתוקן מחדש

אתה משתמש ב-strcat ו-strcpy בכיוון הלא נכון, התוצאה נכנסת לפרמטר השמאלי. הפורמט הנכון הוא

strcpy(destination,string)

ארכיון

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

דיונים חדשים