افزونه 1 مشکل با تابع cin.getline

MPERSIA4

Member

:sad:سلام
من یه مشکلی با پر کردن برای بار دوم رشته ها دارم
و اونم اینه که وقتی یه رشته رو با تابع cin.getline یا cin.get پر میکنم برای بار دوم یا بیشتر نمیتونم ازش استفاده کنم و برنامه کلا خطا میده!!!!!!!!!!!!!!!!!!!
چه کاری باید انجام بدم تا این مشکل برطرف بشه؟
ممنون میشم کمکم کنید
 

the_king

مدیرکل انجمن

:sad:سلام
من یه مشکلی با پر کردن برای بار دوم رشته ها دارم
و اونم اینه که وقتی یه رشته رو با تابع cin.getline یا cin.get پر میکنم برای بار دوم یا بیشتر نمیتونم ازش استفاده کنم و برنامه کلا خطا میده!!!!!!!!!!!!!!!!!!!
چه کاری باید انجام بدم تا این مشکل برطرف بشه؟
ممنون میشم کمکم کنید

باید کد تون رو ببینم که مطمئن بشوم که مشکل از کد تون نیست، اما به احتمال زیاد مشکل مربوط به باقی موندن کاراکتر پایانی رشته در بافر صفحه کلید ئه.
get و getline رشته ورودی رو از بافر ورودی صفحه کلید بر می دارند، اما خود کاراکتر پایانی رشته رو بر نمی دارند و در بافر می مونه. دفعه بعدی که
بخواهید چیزی از بافر بخوانید، اون کاراکتر پایانی سر اش قرار داره و رشته خالی خونده میشه. چاره اش استفاده از fflush ئه.

رجوع شود به :
دریافت رشته با scanf بدون فاصله
 

MPERSIA4

Member
این کدی هست که من باش مشکل پیدا کردم
(راستش من تازه کارم و این کدهارو واسه تمرین میزنم)

[CPPS]
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
void main()
{
int i,j=0,p=0;
char ans='y';
do{
system("cls");
char s[100],c[100],b[10],word[25];
c[0]=0;
cout<<"\n Enter your statement : ";
cin.getline(s,99);
cout<<"\n Enter a word :";
cin.getline(b,9);
strcat(s," ");
for(i=0;i<strlen(s);i++)
{
if(s==' ')
{
word[j]=32;
word[j+1]=0;
if((i-p)==strlen(b))
{
strcat(c,b);
strcat(c," ");
}
else
strcat(c,word);
p=i+1;
j=0;
}
else
{
word[j]=s;
j++;
}
}
cout<<"\n "<<c;
cout<<"\n_________________________________\n\n Do you want enter another statement ?(y/n)";
cin>>ans;
}while(ans=='y');
}
[/CPPS]
 
آخرین ویرایش:

the_king

مدیرکل انجمن
لطفا کاری که انتظار دارید این کد انجام بده و نمونه ورودی ای که تایپ می کنید و خطا میده رو بگویید.
 

MPERSIA4

Member
این کد یه جمله و یه کلمه رو دریافت میکنه که اون کلمه بجای کلمه یا کلمه هایی که تو جمله تعداد حروفشون باش برابرن جایگزین میشه
مثلا


Enter your statement : mina sima milad mahmoud nima
Enter a word : word
که جوابش این میشه :
word word milad mahmoud word
تو این برنامه رشته s[100] جمله رو میگیره و b[10] کلمه ای که میخوایم جایگزین بشهاون for هم برای پیدا کردن کلمه هایی با تعداد حروف مساوی با کلمه مورد نظرمون هست
 

the_king

مدیرکل انجمن
این کد یه جمله و یه کلمه رو دریافت میکنه که اون کلمه بجای کلمه یا کلمه هایی که تو جمله تعداد حروفشون باش برابرن جایگزین میشه
مثلا


Enter your statement : mina sima milad mahmoud nima
Enter a word : word
که جوابش این میشه :
word word milad mahmoud word
تو این برنامه رشته s[100] جمله رو میگیره و b[10] کلمه ای که میخوایم جایگزین بشهاون for هم برای پیدا کردن کلمه هایی با تعداد حروف مساوی با کلمه مورد نظرمون هست

1) متغیر p رو قبل از حلقه do صفر کرده اید و دیگه در تکرار های بعدی 0 نمیشه، صفر کردنش رو از قلم نندازید :
کد:
    do
    {
        p = 0;
        system("cls");

2) بعد از دریافت ورودی هاتون ;(fflush(stdin رو اجرا کنید :
کد:
        cin.getline(s,99);
        fflush(stdin);

کد:
        cin.getline(b,9);
        fflush(stdin);

کد:
        cin>>ans;
        fflush(stdin);
 

MPERSIA4

Member
یه مشکل دیگه با Cin.get , cin.getline

این راه حلی که گفتید تو برنام قبلی کار کرد ولی تو این برنامه جدید نمیدونم چرا کار نمیکنه!!!!!!!!!!!!
کدش اینه :

[CPPS]void q19(){
char s1[40],s2[40],ans='y';
do{
system("cls");
cout<<"\n Enter a sentence : ";
cin.getline(s1,39);
fflush(stdin);
do{
cout<<"\n And Enter sentence for search : ";
cin.getline(s2,39);
fflush(stdin);
if(search(s1,s2))
cout<<"\n ******** FOUND ********";
else
cout<<"\n '''''''' NOT FOUND ''''''''";
cout<<"\n________________________________________\n\n Do you want search again ?(y/n)";
cin>>ans;
}while(ans=='y');
cout<<"\n________________________________________\n\n Do you want enter another search ?(y/n)";
cin>>ans;
}while(ans=='y');
}


[/CPPS]

این برنامه دو تا جمله میگیره و بعد میگه ایا جمله دوم تو جمله اوم بوده یا نه!
عمل جستوجو تو یه تابع دیگه انجام میشه
ولی مشکل از اونجا نیست
این برنامه برای بار اول خوب کار میکنه ولی برای بار دوم نه!!!
ینی برا بار دوم هیچ چیزی از ورودی نمیخونه!!!
ممنون میشم جوابم رو بدید!!
:sad:
 
آخرین ویرایش:

the_king

مدیرکل انجمن
این راه حلی که گفتید تو برنام قبلی کار کرد ولی تو این برنامه جدید نمیدونم چرا کار نمیکنه!!!!!!!!!!!!
این برنامه دو تا جمله میگیره و بعد میگه ایا جمله دوم تو جمله اوم بوده یا نه!
عمل جستوجو تو یه تابع دیگه انجام میشه
ولی مشکل از اونجا نیست
این برنامه برای بار اول خوب کار میکنه ولی برای بار دوم نه!!!
ینی برا بار دوم هیچ چیزی از ورودی نمیخونه!!!
ممنون میشم جوابم رو بدید!!
:sad:

دلیلش اینه که دو تا سطر cin دارید و بدون fflush. در هر دو مورد بعد از cin اون fflush رو اضافه کنید :
کد:
		cin>>ans;
		fflush(stdin);
 

جدیدترین ارسال ها

بالا