PDA

View Full Version : مشکل در برنامه ای برای شمارش تعداد کاراکتر های یک جمله



alirah84
شنبه 18 مرداد 1393, 21:22 عصر
سلام
برنامه ای که با خواندن یک جمله از ورودی ، تعداد کاراکتر ها و کلمات موجود در جمله را شمارش می کند .کلمات با فاصله از هم جدا شده اند و انتهای جمله به کلید Enter ختم می شود .متغیر charcount تعداد کاراکتر ها و متغیر wordcount تعداد کلمات جمله را شمارش می کند و ch کاراکتری است که از ورودی خوانده می شود.

من متوجه نمیشم خط 9 برنامه چه کاری انجام میده و دلیل استفاده از cin.get() چیه؟یه توضیح بدید ممنون میشم.


#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int charCount=0 , wordCount=0;
char ch;
cout<< "\nEnter a statement (and press ENTER) :";
while ( (ch=cin.get() ) != '\n'
{
charCount ++ ;
if (ch==' ')
wordCount ++
} // end of while
cout << "\nChar count ="<<charCount
<< ", Word Count = " <<wordCount+1;
cin.get(); // ignore end of line char
cin.get();
}

a.r.khoshghalb
شنبه 18 مرداد 1393, 21:25 عصر
وقتی در حالت عادی cin بکنی کاراکتر هایی مثه اینتر و اسپیس خونده نمیشه.
ولی دستور cin.get این کاراکتر ها رو هم می خونه.
از این دستور برای این استفاده شده که تا وقتی اینتر نیست و متن به خط بعدی نرفته کاراکتر بخونه.

alirah84
شنبه 18 مرداد 1393, 23:49 عصر
میشه خط 9 رو توضیح بدید

omid_kma
یک شنبه 19 مرداد 1393, 00:34 صبح
while ( (ch=cin.get() ) != '\n' )

کاراکتر ورودی رو داخل ch میزاره بعد چک می کنه که کاراکتری که وارد شده آیا \n هست یا نه
\n کاراکتر newline هست یعنی نشان دهنده پایان خط هستش

اگر هم مشکلتون با اینه که چرا میشه هم مساوی و هم مقایسه داخل while انجام داد بخاطر اینه که عملگر () اطراف ()ch=cin.get این جا مقدار از نوع lvalue refrence (http://www.7khatcode.com/index.php?qa=796&qa_1=%D9%85%D8%B9%D9%86%DB%8C-lvalue-%D9%88-rvalue-%DA%86%DB%8C%D9%87-%D8%9F&show=796#q796) بر می گردونه (http://stackoverflow.com/questions/3097779/decltype-and-parentheses) بعد این مقدار با \n مقایسه میشه .

behnam404
دوشنبه 20 مرداد 1393, 23:27 عصر
خط 9
در حلقه cin.get() تک تک کاراکتر ها رو میخونه و در ch قرار میده تا وقتی که کاراکتر وارد شده اینتر یا همان \n باشد

مهسا.م
یک شنبه 10 دی 1396, 08:41 صبح
while ( (ch=cin.get() ) != '\n' )

کاراکتر ورودی رو داخل ch میزاره بعد چک می کنه که کاراکتری که وارد شده آیا \n هست یا نه
\n کاراکتر newline هست یعنی نشان دهنده پایان خط هستش

اگر هم مشکلتون با اینه که چرا میشه هم مساوی و هم مقایسه داخل while انجام داد بخاطر اینه که عملگر () اطراف ()ch=cin.get این جا مقدار از نوع lvalue refrence (http://www.7khatcode.com/index.php?qa=796&qa_1=%D9%85%D8%B9%D9%86%DB%8C-lvalue-%D9%88-rvalue-%DA%86%DB%8C%D9%87-%D8%9F&show=796#q796) بر می گردونه (http://stackoverflow.com/questions/3097779/decltype-and-parentheses) بعد این مقدار با \n مقایسه میشه .



سلام.
من یه سوال داشتم.
من میخوام یه برنامه بنویسم که تعداد کرکترهای جمله ای که کاربر وارد میکنه رو بهم بگه. بعد نمیدونم چی کار کنم که white space رو محاسبه نکنه.

الان حلقه ی for برنامه ی من اینجوری هست:

for(count=0; cin.get() != '@' ;count++);