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

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


iakovl

Recommended Posts

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

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

--------------------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 טהור לא יכיר בפונקציה הזאת.

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

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

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

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

ארכיון

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

×
  • צור חדש...