כותב |
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 11 October 2005 בשעה 23:11 | | IP רשוּם
|
|
|
|
בניתי קטע תוכנית שאמורה לקלוט מהמשתמש מחרוזת כלשהי, ולחפש אותה
בתוך קובץ טקסט, אם המחרוזת נמצאה אז תבוא הודעה התאם, משום מה זה לא עובד
קוד:
char line[80];
char query[20];
int length;
int i=0;
char ch;
char str[20];
void search()
{
f=fopen(file_name,"r");
printf("\nenter query to serch: ");
scanf("%s",&query);
length=strlen(query);
for (i=0; i<=length && ch!=EOF; i++)
{
fscanf(f,"%s", &ch);
str=ch;
if ( strcmp(str,query)==0 )
printf("\nthe string found!!");
}
fclose(f);
}
|
|
|
מה לא נכון?
[אין טעות קומפילציה, התוכנית רצה אבל החיפוש עצמו לא מחזיר תשובה נכונה]
הנה הקוד המלא למי שרוצה:
קוד:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include<string.h>
FILE *f;
char name[15];
char phone[30];
char file_name[]="db.txt";
char line[80];
char query[20];
int length;
int i=0;
char ch;
char str[20];
char c;
void write_2_file()
{
f=fopen(file_name,"a+");
printf("\nplz enter phone number: ") ;
scanf( "%s" , &phone);
printf("\nplz enter name: ");
scanf("%s", &name);
fprintf(f, "name: %7s | phone: %s\n", name,phone);
fclose(f);
printf("\nfile saved!\n");
}
void show_all()
{
f=fopen(file_name,"r");
while ( fgets(line, 80, f) !=NULL )
{
printf("%s",line);
}
fclose(f);
}
void search()
{
f=fopen(file_name,"r");
printf("\nenter query to serch: ");
scanf("%s",&query);
length=strlen(query);
for (i=0; i<=length && ch!=EOF; i++)
{
fscanf(f,"%s", &ch);
str=ch;
if ( strcmp(str,query)==0 )
printf("\nthe string found!!");
}
fclose(f);
}
void main()
{
clrscr();
printf("Oragnaizer\n\n");
printf("--------------------\n\n");
printf("welcome to your organizer, please select task:\n");
printf("1) show all [press s] \n");
printf("2) add new phone [press a] \n\n");
do
{
c=getch();
if (c=='a')
write_2_file();
if (c=='s')
show_all();
} while (c!='q');
}
|
|
|
|
חזרה לתחילת העמוד |
|
|
ShadowBeast אחראי פורומים
הצטרף / הצטרפה: 22 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1073
|
נשלח בתאריך: 11 October 2005 בשעה 23:43 | | IP רשוּם
|
|
|
|
wtf is going on?
read the guide that nir wrote, about file handling
you have to make some pointers and crap
READ the guide
__________________ The highest knowledge is to know that we are surrounded by mystery - Albert Schweitzer
He who will not take the hint, must take the consequence - Glenn v. Covey (1854)
ShadowBeast
|
חזרה לתחילת העמוד |
|
|
Nameless אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 12 October 2005 בשעה 00:00 | | IP רשוּם
|
|
|
|
תוסיף בהתחלה
קוד:
#include <stdio.h> #include <stdlib.h>
|
|
|
stdio בשביל כל ה scanf printf stdlib בשביל הקבצים
תהפוך את void main ל int main ובסוף לפני ה { האחרון תשים return 0;
ולמה שמת את המשתנים כמשתנים גלובליים? זה לא נחוץ
|
חזרה לתחילת העמוד |
|
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 12 October 2005 בשעה 08:00 | | IP רשוּם
|
|
|
|
ShadowBeast כתב:
wtf is going on?
read the guide that nir wrote, about file handling
you have to make some pointers and crap
READ the guide |
|
|
לא לא לא, אמרתי זה רק קטע תוכנית....
פשוט תבדקו את האלגוריתם, האם הוא טוב?
אני לא מוצא בו שום טעות אבל משום מה זה לא מוצא את הסטרינג...
עריכה:
שמתי עכשיו את הקוד המלא אם זה עוזר למישהו..
כל הפונקציות עובדות כמו שצריך
רק הפונקצייה search() עושה בעיות..
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 12 October 2005 בשעה 09:04 | | IP רשוּם
|
|
|
|
בעיות:
1. שימוש במשתנים גלובליים
2. קריאת מחרוזת %s לתוך תו בודד (ch)
3. השמת תו למחרוזת
4. אתה עושה לולאה אבל לא משתמש בכלל במשתנה i שבה.
יש עוד המון בעיות - הקוד בכלל לא בכיוון
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 12 October 2005 בשעה 09:27 | | IP רשוּם
|
|
|
|
UnderWarrior כתב:
בעיות:
1. שימוש במשתנים גלובליים
2. קריאת מחרוזת %s לתוך תו בודד (ch)
3. השמת תו למחרוזת
4. אתה עושה לולאה אבל לא משתמש בכלל במשתנה i שבה.
יש עוד המון בעיות - הקוד בכלל לא בכיוון
|
|
|
אוקיי תודה באמת לא שמתי לב ל %S
שיניתי עכשיו כמה דברים והפונקצייה עובדת אבל חלקית..
זה בעייה, כי מה שהתוכנית עושה, זה פשוט לקלוט מהקובץ טקסט מחרוזות באורך
של הערך שמחפשים, למשל מחפשים את הערך "abc" , אז התוכנית תקלוט כל פעם
[עד סוף הקובץ] מחרוזת באורך שלוש תווים ותשווה אותה ל "abc", זה יעבוד רק
במקרים ספציפיים
כמו למשל עם הערך "abc" נמצא כבר על ההתחלה, אבל נגיד אם בקובץ טקסט
הטקסט יהיה: "12abc", אז התוכנית תקלוט שתי מחרוזות, המחרוזת הראשונה "12a"
המחרוזת השנייה "bc", היא תשווה כל אחת מהמחרוזות ל "abc" ואז היא תגיד שהמחרוזת לא נמצאה שזה בעצם טעות...
בקיצור, מישהו יכול לתת לי כיוון איך אני יכול למצוא מחרוזת בתוך קובץ טקסט?
|
חזרה לתחילת העמוד |
|
|
no nick.inc אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 12 October 2005 בשעה 10:22 | | IP רשוּם
|
|
|
|
פתרון אחד הוא להתקדם כול פעם בתו אחד בקובץ! כלומר אתה סורק שלוש תווים ואז חוזר שני צעדים אחורה וממשיך ככה את כול הקובץ!
דוגמה 12abc
בקריאה ראשונה 12a קריאה שניה 2ab קריאה שלישית abc.
|
חזרה לתחילת העמוד |
|
|
אבידור משתמש חבר
הצטרף / הצטרפה: 11 October 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 162
|
נשלח בתאריך: 12 October 2005 בשעה 11:12 | | IP רשוּם
|
|
|
|
כמאט הצלחתי לתקן אותה..
קיצר שמע אין לי זמן לזה אז תנסה לבנות מחדש את הפונקציה כך ש:
תסרוק כל פעם מחדש את הקובץ ממקום כלשהוא לדוגמא
הקלדתי SS אז LENGHT=2.
בהתחלה זה מתחיל מהתחלת הקובץ אז אני עושה לולאת FOR
שסורקת את התוים ומכניסה אותם לSTR ואחכ בודקת עם לא הגענו לסוף הקובץ. לדוגמא
for(i=0;i<lenght;i++)
{
fscanf(f,"%c",&ch);
if(ch==EOF)
exit(0);
str=ch;
}
אז זה מכניס את ה LENGHT התוים הראשונים לתוך המשתנה STR.
אח"כ תבצע בדיקה עם זה שווה או לא.
ואם לא תמשיך לבדוק בקיצר תקרא את כל הקוד שאני יכתוב פה עכשיו.
נ.ב.
fseek מעביר מיקום בקובץ.
וכל פעם שקוראים תו , זה אוטומתי מעביר אותו לתו הבא.
לכן אנחנו לא צריכים את זה..
הקוד לבדיקה בערך :
(לא בטוח שיפעל)
search(0);
void search(int a)}
fseek(f,a,SEEK_CUR)
for(i=0;i<lenght;i++)
{
fscanf(f,"%c", &ch);
if(ch==EOF)
exit(1);
str=ch;
}
if(strcmp(query,str)==0)
{
printf("FOUND");
getch();
return 1;
}
else
{
fseek(f,-lenght,SEEK_CUR);
search(a+1);
}
}
פונקציה רקורסיבית (ואני די חדש בזה...).
יש לי שמה כמה טעויות - עשיתי בטיל את הפונקציה - תתקן אחי
|
חזרה לתחילת העמוד |
|
|