PDA

View Full Version : سوال در مورد برنامه دیکشنری



<برنامه نویس>
پنج شنبه 22 مرداد 1388, 17:19 عصر
سلام دوستان این سورس رو من هر جوری اجرا میکنم خطا میگیره میشه بگید اولا باید توی چه محیطی اجراش کنم


#include <stdio.h>
#include <string.hpp>
#include <direct.h>
#include <stdlib.h>
void main(){
DIR *dirp;
struct dirent *direntp;
dirp = opendir( ".\\data" );
direntp = readdir( dirp );
direntp = readdir( dirp );
direntp = readdir( dirp );
int has=0; int sel=1; int sele=0; int stop=0;
if( direntp == NULL ){printf("No dictionary was found in the 'data' directory.\nYou can download compatible free dictionaries at http://www.dicts.info/uddl.php "); getchar(); exit(0);}
printf("Select dictionary:\n");
while( true ) {
if( direntp == NULL ) break;
printf("%d - %s\n",sel,direntp->d_name);
direntp = readdir( dirp );
has=1;
sel++;
}
if(has=1){printf("Enter your choice (1 - %d): ",sel-1);
scanf("%d",&sele);}
if(sele<1 || sele>=sel){printf("Invalid choice!"); exit(0);}
dirp = opendir( ".\\data" );
direntp = readdir( dirp ); direntp = readdir( dirp );
sel=0;
while(sel<sele){direntp = readdir( dirp ); sel++; }
printf("Active dictionary: %s\nPress CTRL+C to exit.",direntp->d_name);
String file=direntp->d_name;
char word[80];
while(true){
printf("\nSearch for: ");
scanf("%s",&word);
FILE *fr;
char buffer[80];
fr = fopen( ".\\data\\"+file, "r" );
if( fr != NULL ) {
int cnt=0;
printf("__________________________________________________ _________\n");
for(int i=0; i<25;i++)fgets( buffer, 80, fr );
while( fgets( buffer, 80, fr ) != NULL ){
if(strstr(buffer,word)!=NULL){
printf("%s",buffer);
cnt++;
if(cnt>250){printf(" Only first 250 matches listed.\n"); break;}
}
}
fclose( fr );
printf("__________________________________________________ _________");
}
else{
printf("Cannot open dictionary file");
exit(0);
}
}
}



این یک دیکشنری هستش که میره اطلاعات را از داخل فولدر txt در میاره و نشون میده میشه راهنمایی کنید

اوبالیت به بو
پنج شنبه 22 مرداد 1388, 17:33 عصر
با يك نگاه گذرا ميشه گفت كد مشكلي نداره.
احتمالاً كامپايلرتون Header ها رو نمي تونه بشناسه و خطا ها رو از رو دستورهايي كه مربوط به اين include ها ميشن رو مي گيره.
اينجا راجب به انتخاب كامپايلر توضيحاتي داده شده:


http://barnamenevis.org/forum/showthread.php?t=115240

شايد مشكل از كامپايلرتون باشه.

tdkhakpur
پنج شنبه 22 مرداد 1388, 19:41 عصر
کجا ایراد میگیره ؟ ارور را هم ارسال کنید.

clover
پنج شنبه 22 مرداد 1388, 21:00 عصر
اولا این خط را تصحیح کنید :

#include <string.hpp>
به
#include <string.h>

بعد سوالی که برای من پیش اومده اینه که شما این سورس را از کجا آوردید ؟

کسی می تونه به من بگه معنی این دستورات چیه ؟

DIR *dirp;
struct dirent *direntp;
dirp = opendir( ".\\data" );
direntp = readdir( dirp );
direntp = readdir( dirp );
direntp = readdir( dirp );
:متفکر:

Saeed_m_Farid
پنج شنبه 22 مرداد 1388, 21:49 عصر
اولا این خط را تصحیح کنید :

#include <string.hpp>
به
#include <string.h>

همين فايل hpp نشون ميده كه اين فايل هدر، يه فايل پاسكال بوده كه كامپايل شده، پس كامپايلر بايد سازگار با اون باشه و به همين دليل حداقل BCB ميتونه برنامه رو كامپايل كنه ...
ضمناً برنامه غير از اشكالات نحوي، داراي اشكالات منطقي هم هست. من اشكالات دستور زباني و هدر فايلها رو اصلاح كردم با اينكه زياد رو كد ريز نشدم ولي احساس مي كنم، منطق برنامه مورد داره (مثلاً همين كه وجود پوشه data‌ رو بررسي نمي كنه و اين باعث ميشه readdir درصورت نيافتن پوشه به علت دريافت ورودي NULL تو exception بيافته ...)



کسی می تونه به من بگه معنی این دستورات چیه ؟

DIR *dirp;
struct dirent *direntp;
dirp = opendir( ".\\data" );
direntp = readdir( dirp );
direntp = readdir( dirp );
direntp = readdir( dirp );


اين توابع تو هدر فايل dirent.h (براي عمليات مبتني بر سيستم عاملهاي سازگار با POSIX براي پوشه ها) و direct.h (براي structure ها, macro هاي مورد استفاده) قرار دارن و براي كار با پوشه ها و مسيرها مورد استفاده قرار مي گيرند.



بعنوان مثال readdir اين توضيح خلاصه اشه: readdir is available on POSIX-compliant UNIX systems.



من يه تغييراتي تو كد دادم تا فعلاً فقط خطا نده! ولي درست كار كردنش رو خدا مي دونه، چون واقعيتش حوصله امتحانش رو نداشتم :


#include <stdio.h>
#include <direct.h>
#include <dirent.h>
#include <stdlib.h>

void main(){
DIR *dirp;
struct dirent *direntp;
if ((dirp = opendir(".\\data")) == NULL)
{
perror("Unable to open \".\\data\" directory");
exit(1);
}
direntp = readdir( dirp );
direntp = readdir( dirp );
direntp = readdir( dirp );
int has=0,
sel=1,
//stop=0,
sele=0;
if( direntp == NULL ){printf("No dictionary was found in the 'data' directory.\nYou can download compatible free dictionaries at http://www.dicts.info/uddl.php "); getchar(); exit(0);}
printf("Select dictionary:\n");
while( true ) {
if( direntp == NULL ) break;
printf("%d - %s\n",sel,direntp->d_name);
direntp = readdir( dirp );
has=1;
sel++;
}
if(has==1){printf("Enter your choice (1 - %d): ",sel-1);
scanf("%d",&sele);}
if(sele<1 || sele>=sel){printf("Invalid choice!"); exit(0);}
dirp = opendir( ".\\data" );
direntp = readdir( dirp ); direntp = readdir( dirp );
sel=0;
while(sel<sele){direntp = readdir( dirp ); sel++; }
printf("Active dictionary: %s\nPress CTRL+C to exit.",direntp->d_name);
char dFile[260] = ".\\data\\";
strcpy(dFile, direntp->d_name);
char word[80];
while(true){
printf("\nSearch for: ");
scanf("%s",&word);
FILE *fr;
char buffer[80];
fr = fopen(dFile, "r" );
if( fr != NULL ) {
int cnt=0;
printf("__________________________________________________ _________\n");
for(int i=0; i<25;i++)fgets( buffer, 80, fr );
while( fgets( buffer, 80, fr ) != NULL ){
if(strstr(buffer,word)!=NULL){
printf("%s",buffer);
cnt++;
if(cnt>250){printf(" Only first 250 matches listed.\n"); break;}
}
}
fclose( fr );
printf("__________________________________________________ _________");
}
else{
printf("Cannot open dictionary file");
exit(0);
}
}
}

موفق باشيد