View Full Version : سوال: مشکل در حلقه تکرار
rm classic
یک شنبه 10 شهریور 1392, 21:08 عصر
سلام به همه
من یه برنامه تو visual c++ نوشتم اما تو اجراش مشکل دارم:
من یه حلقه تکرار نوشتم که اولش cin.get داره. برنامه با یه بار اجرا کردن این حلقه میپره بیرون(بار دوم اجراش نمیکنه). من مطمئن شدم مشکل از cin.get هست اما هرکار میکنم نمیتونم اینو درستش کنم:ناراحت:
omidshaman
یک شنبه 10 شهریور 1392, 21:44 عصر
کدی که نوشتی رو کامل بزار
rm classic
یک شنبه 10 شهریور 1392, 22:14 عصر
اینم کد:
for(i=0;i<32;i++)
{
cin.get(a,60);
if (strcmp(a,b[i+1])==0)
cout << b[i+2] << "\n";
else
break;
}
omidshaman
یک شنبه 10 شهریور 1392, 23:29 عصر
منظورم از کامل کل کد بود شامل تعریف a,b ,... !
بعد این مدل کد نوشتن اصلا جالب نیست اگر قراره C++ استفاده کنی دیگه چرا از هدر های c استفاده می کنی
فکر کنم این چیزی باشه که شما دنبالشی
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string a;
vector<string> b;
for(int i=0;i<34;i++)//gozashtan yek seri meghdar avalie dar b
{
b.push_back("kalame");
}
for(int i=0;i<32;i++)
{
getline(cin,a);
if(a==b[i+1])
cout<<b[i+2]<<endl;
// break;
}
}
rm classic
یک شنبه 10 شهریور 1392, 23:33 عصر
راستش من هنوز به اینها نرسیدم(یکم مبتدی ام)
rm classic
دوشنبه 11 شهریور 1392, 09:41 صبح
یکم میتونی ساده تر بنویسی؟
از اینا هیچی نفهمیدم !
farshchian2090
دوشنبه 11 شهریور 1392, 14:53 عصر
پارامتر دوم تابع get از نوع int نیست ولی شما در آن عدد وارد کردید.
تابع get در C++ شش حالت داره که سه تاش 2 پارامتری ، دوتاش یک پارامتری و یکیش بدون پارامتره و تو اون سه تای اول هم پارامتر دومش int نیست ولی شما در پارامتر دوم عدد وارد کردید(60) به احتمال زیاد همین مشکل ساز شده.
در حقیقت نیازی به پارامتر دوم نیست یعنی به این شکل:
cin.get(a) ;
rm classic
دوشنبه 11 شهریور 1392, 18:05 عصر
نه مشکل از این نیست
در واقع پارامتر دوم طول رشته رو مشخص میکنه و نوشتن این پارامتر تو تایع cin.get() برای تعیین محدودیت تعداد کاراکتریه که از ورودی میگیره(توی کتاب مهندس قمی هم نوشته شده)
تو برنامه هم امتحانش کردم که تو دیباگ ارور میداد
omidshaman
دوشنبه 11 شهریور 1392, 18:11 عصر
این کدی که شما گزاشتی مشکلی نداره a,b زو چجوری تعریف کردی مقدار گزاشتی؟
انتظار داری این کد چکار کنه؟
rm classic
دوشنبه 11 شهریور 1392, 20:04 عصر
این یه برنامه مشاعره ست
مصراع اول رو میگه مصراع دوم رو میخونه اگه درست بود میره مصراع بعدی(اگه غلط بود break میکنه)و این روال تا اخر شعر به صورت یکی در میون ادامه پیدا میکنه:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <conio.h>
#include <string.h>
int main()
{
char a[61],b[32][61]={"ey parandeye mohajer","safaret salamat ama"
,"be koja miri azizam","ghafase tamoom e donya","rooye shakhe haye doori"
,"che khoshi dare saboori","vaghti khorshidi nabashe","ta hamishe soot o kgoori"
,"migzare roozaye omret","tooye jade haye khalvat","ta bekhay bargardi khoone"
,"gom mishi too bagh e ghorbat","vase ma farghi nadare"
,"har ja bashim shab neshinim","delkhoshim be in ke shayad","saharo ye rooz bebinim"
,"akharesh ye roozi hejrat","dare khoonato mikoobe","taze oon lahze mifahmi","hame asemoon ghoroobe"
,"migzare roozaye omret","tooye jade haye khalvat","ta bekhay bargardi khoone"
,"gom mishi too bagh e ghorbat","vase ma farghi nadare","har ja bashim shab neshinim"
,"delkhoshim be in ke shayad","saharo ye rooz bebinim"
,"akharesh ye roozi hejrat","dare khoonato mikoobe","taze oon lahze mifahmi","hame asemoon ghoroobe"};
int i=0;
cout << b[i] << "\n";
for(i=0;i<32;i++)
{
cin.get(a,60);
if (strcmp(a,b[i+1])==0)
cout << b[i+2] << "\n";
else
break;
}
getch();
return 0;
}
omidshaman
دوشنبه 11 شهریور 1392, 20:37 عصر
به خاطره اینه که یک /n داخل بافر cin میمونه(چون /n داخل a نمیره ) که با cin.ignore() مشکلت حل میشه
در ضمن اون کتاب جعفر نژاد هم به درد نمی خوره .
یک مشکل هم در گزاشتن i داشتی چون اندازه b این جا 32 ست بعد داری تا i+2 استفاده می کنی پس تا 30 بیشتر نباید بری.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[60],b[32][60]={"ey parandeye mohajer","safarat salamat ama"
,"be koja miri azizam","ghafase tamoom e donya","rooye shakhe haye doori"
,"che khoshi dare saboori","vaghti khorshidi nabashe","ta hamishe soot o kgoori"
,"migzare roozaye omret","tooye jade haye khalvat","ta bekhay bargardi khoone"
,"gom mishi too bagh e ghorbat","vase ma farghi nadare"
,"har ja bashim shab neshinim","delkhoshim be in ke shayad","saharo ye rooz bebinim"
,"akharesh ye roozi hejrat","dare khoonato mikoobe","taze oon lahze mifahmi","hame asemoon ghoroobe"
,"migzare roozaye omret","tooye jade haye khalvat","ta bekhay bargardi khoone"
,"gom mishi too bagh e ghorbat","vase ma farghi nadare","har ja bashim shab neshinim"
,"delkhoshim be in ke shayad","saharo ye rooz bebinim"
,"akharesh ye roozi haejrat","dare khoonato mikoobe","taze oon lahze mifahmi","hame asemoon ghoroobe"};
int i=0;
cout << b[i] << "\n";
for(i=0;i<30;i++)
{
cin.get(a,60);
cin.ignore();
// cin.clear();
if (strcmp(a,b[i+1])==0)
cout << b[i+2] << "\n";
else
break;
}
cin.get();
return 0;
}
rm classic
دوشنبه 11 شهریور 1392, 20:45 عصر
من نفهمیدم چیکار کردی ولی تابع cin.ignore() باعث شد تابع if break کنه!
یعنی کلمه ای که داخل a هست مساوی با b نیست
omidshaman
دوشنبه 11 شهریور 1392, 20:51 عصر
http://upload7.ir/images/15722272005434024822.jpg
rm classic
دوشنبه 11 شهریور 1392, 23:55 عصر
!!!!thanks
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.