PDA

View Full Version : مشکل این کد کجاست ؟ ارور Lvalue Required میده



amir_varasteh
شنبه 26 اردیبهشت 1388, 15:10 عصر
سلام دوستان.

صورت سوال این هست :

برنامه ای بنویسید که 10 نام را از فایل ورودی names.txt بخواند و مشخص کند که بیشترین نامی که تکرار شده کدام است ؟

من یک آرایه با عنصرهای ساختاری درست کردم که هر عنصرش دو فیلد نام و تعداد تکرار رو داره.

منطق برنامه درسته اما نمیدونم چرا این ارور رو میده : Lvalue required

من فکر میکنم مشکل از قسمت قرمز رنگه.چیکارش کنم ؟


#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void main()
{
clrscr();
FILE *f1;
struct txt
{
char name[20];
int rep;
}list[10];
f1=fopen("C:\\data\\name.txt","r");
for(int i=0;i<10;i++)
list[i].rep=0;
int j=0;
char A[20];
while(!feof(f1))
{
fscanf(f1,"%c",&A);
list[j].name=A;
list[j].rep++;
j++;
}
int max=0;
for(int k=1;k<10;k++)
if(list[k].rep>list[max].rep)
max=k;
cout<<list[max].name;
getch();
}


دوستان لطفا" راهنمایی کنید.


با تشکـــر.

tdkhakpur
شنبه 26 اردیبهشت 1388, 15:23 عصر
برنامتون فکر نکنم درست جواب بده ولی errorها رو بصورت زیر اصلاح کن.

#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void main()
{
clrscr();
FILE *f1;
struct txt
{
char name[20];
int rep;
}list[10];
f1=fopen("C:\\data\\name.txt","r");
for(int i=0;i<10;i++)
list[i].rep=0;
int j=0;
char A[20];
while(!feof(f1))
{
fscanf(f1,"%c",&A); // errore 1
list[j].name=A; // errore 2
list[j].rep++;
j++;
}
int max=0;
for(int k=1;k<10;k++)
if(list[k].rep>list[max].rep)
max=k;
cout<<list[max].name;
getch();
}

در خط با علامت // errore 1


fscanf(f1,"%s",&A);
قرار بده
در خط با علامت // errore 2

strcpy(list[j].name, A);
قرار بده
موفق باشی اگه سوالی بود ارسال کن.

amir_varasteh
شنبه 26 اردیبهشت 1388, 15:47 عصر
دوست عزیز , من اینایی که گفتی رو اصلاح کردم.

یه تغییر کوچولو هم دادم.

اون ارور رو دیگه نداد اما برنامه جواب اشتباه میده.

فکر کنم ایراد از اینجا باشه :


for(int j=0;j<10;j++)

while(!feof(f1))
{
fscanf(f1,"%s",&A);
strcpy(list[j].name,A);
list[j].rep++;
}فک کنم هر دفعهj اشتباه ++ میشه .

tdkhakpur
شنبه 26 اردیبهشت 1388, 18:23 عصر
سلام:
من این برنامه رو برات اصلاح میکنم ولی اگه خودت مرورش کنی عین این میمونه که خودت اصلاحش کردی.
موفق باشید.


#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void main()
{
clrscr();
FILE *f1;
struct txt
{
char name[20];
int rep;
}list[10];
f1=fopen("C:\\data\\name.txt","rb");
for(int i=0;i<10;i++)
list[i].rep=0;
int j=0;
char A[20];
while(f1 != NULL && !feof(f1))
{
fscanf(f1,"%s",&A); // errore 1
// ---------------- add to programm
for(int i=0;i<j;i++)
if( strcmp(list[i].name, A)==0 ){
list[i].rep++;
break;
}else{
strcpy(list[j].name, A); // errore 2
list[j].rep = 1;
}
// ----------------
j++;
}
fclose(f1); // bayad bebandish
int max=0;
for(int k=1;k<10;k++)
if(list[k].rep>list[max].rep)
max=k;
cout<<list[max].name;
getch();
}

amir_varasteh
شنبه 26 اردیبهشت 1388, 22:02 عصر
تشکر میکنم از توجه شما .

برنامه کار کرد , خیلــــــــــــــــی ممنون.

اگه لطف کنی و نکاتش رو هم توضیح بدی ممنون میشم.


با تشکـــــــر !