Help sửa code cho em với :((( - vozForums
vozForums
Go Back   vozForums > Học tập và công việc > Ngành CNTT > Phát triển Phần mềm
Reply
 
Thread Tools
  #1  
Old 21-05-2018, 06:11
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

Help sửa code cho em với :(((


Bài trên trường ra pass data vào object rồi in tên ra kèm theo chiều dài của tên, tuổi ko in nhưng vẫn bắt pass vô Em điền số người xong điền tên tuổi, tới tuổi của người thứ 2 là bị lỗi Ai giúp em với sắp hết hạn rồi còn 2 bài khác nữa

Code:
#include <iostream>
#include <string> 
#include "Person.h"
using namespace std;
int lengthOfName(Person &p);
int main()
{
	int number, age;
	string name;
	cout << "How many people ?: ";
	cin >> number;
	Person *ptr = nullptr;
	Person obj;
	obj.Person::Person(number);
	ptr[] = &obj;
	for (int count = 0; count < number; count++)
	{
		cout << "Enter name of person " << count+1 << ": ";
		cin >> name;
		ptr[count].setName(name);
		cout << "Enter age of person " << count+1 << ": ";
		cin >> age;
		ptr[count].setAge(age);
	}
	for (int count = 0; count < number; count++)
	{
		cout << "The name " << ptr[count].getName() << " has length " << lengthOfName(*ptr) << endl;
	}
	delete ptr;
	ptr = nullptr;
  	return 0; 
}
int lengthOfName(Person &p)
{
	string name = p.getName();
	return name.length();
}
Reply With Quote
  #2  
Old 21-05-2018, 07:05
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

E sửa được rồi nhưng lúc chạy cái đoạn getline nó bị bỏ qua là sao ạ


Code:
#include <iostream>
#include <string> 
#include "Person.h"
using namespace std;
int lengthOfName(Person &p);
int main()
{
	int number, age;
	string name;
	cout << "How many people ?: ";
	cin >> number;
	Person *ptr = nullptr;
	Person obj;
	ptr = &obj;
	ptr = new Person[number];
	for (int count = 0; count < number; count++)
	{
		cout << "Enter name of person " << count+1 << ": ";
		getline(cin, name);
		ptr[count].setName(name);
		cout << "Enter age of person " << count+1 << ": ";
		cin >> age;
		ptr[count].setAge(age);
	}
	for (int count = 0; count < number; count++)
	{
		cout << "The name " << ptr[count].getName() << " has length " << lengthOfName(*ptr) << endl;
	}
	delete [] ptr;
	ptr = nullptr;
  	return 0; 
}
int lengthOfName(Person &p)
{
	string name = p.getName();
	return name.length();
}
Reply With Quote
  #3  
Old 21-05-2018, 07:15
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

e vừa thêm cin.ignore(); vào là nó chạy ngon rồi ko bị bỏ qua đoạn enter name. Nhưng mà tại sao lại như thế ạ
Reply With Quote
  #4  
Old 21-05-2018, 12:57
Truantee Truantee is offline
Senior Member
 
Join Date: 05-2016
Posts: 870

Quote:
Originally Posted by giwim 5 View Post
e vừa thêm cin.ignore(); vào là nó chạy ngon rồi ko bị bỏ qua đoạn enter name. Nhưng mà tại sao lại như thế ạ
khi cậu cin >> number vào nó còn thừa cái "\n" (bằng giá trị khi cậu gõ enter) chưa dùng, phải flush đi nếu muốn đọc tiếp dữ liệu khác
Reply With Quote
Đang tải...
  #5  
Old 21-05-2018, 13:41
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

Quote:
Originally Posted by Truantee View Post
khi cậu cin >> number vào nó còn thừa cái "\n" (bằng giá trị khi cậu gõ enter) chưa dùng, phải flush đi nếu muốn đọc tiếp dữ liệu khác
cảm ơn thím, yêu thím quá
Reply With Quote
  #6  
Old 22-05-2018, 04:57
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

Code:
ptr[count].setName(name);
ptr[count].setAge(age);
Các thím ơi, cái dòng trên e muốn sửa ko dùng dấu chấm mà dùng -> như này:

Code:
ptr[count]->setName(name);
ptr[count]->setAge(age);
sao ko được ạ, có phải vì ptr là array nên ko được ko
Reply With Quote
  #7  
Old 22-05-2018, 06:37
Quang4me's Avatar
Quang4me Quang4me is offline
Senior Member
 
Join Date: 04-2008
Posts: 382

Quote:
Originally Posted by giwim 5 View Post
Code:
ptr[count].setName(name);
ptr[count].setAge(age);
Các thím ơi, cái dòng trên e muốn sửa ko dùng dấu chấm mà dùng -> như này:

Code:
ptr[count]->setName(name);
ptr[count]->setAge(age);
sao ko được ạ, có phải vì ptr là array nên ko được ko
Cần phải hiểu sự khác nhau giữa pointer trên memory. "." là tham khảo trực tiếp lên vùng memory chứa data. Còn "->" thao khảo gián tiếp từ một vùng memory chứa pointer (pointer này chứa địa chỉ đến vùng memory chứa data)

Khi bạn khai báo
Quote:
Person obj;
Tức là khai báo vùng memory chứa data, chứ đâu phải khai báo pointer.

Sửa thành kiểu này
Code:
int main()
{
  int number, age;
  string name;
  cout << "How many people ?: ";
  cin >> number;
  Person *ptr[number];
  for (int count = 0; count < number; count++)
  {
    Person *obj = new Person();
    ptr[count] = obj;
    cin.ignore();
    cout << "Enter name of person " << count+1 << ": ";
    getline(cin, name);
    
    ptr[count]->setName(name);
    cout << "Enter age of person " << count+1 << ": ";
    cin >> age;
    ptr[count]->setAge(age);
  }
  for (int count = 0; count < number; count++)
  {
    cout << "The name " << ptr[count]->getName() << " has length " << lengthOfName(**ptr) << endl;
  }
  delete  *ptr;
  return 0;
}
p/s: Bài về nhà thì tự mày mò, giải quyết thì sẽ có cảm giác đã hơn
Reply With Quote
  #8  
Old 22-05-2018, 06:42
giwim 5's Avatar
giwim 5 giwim 5 is offline
Đã tốn tiền
 
Join Date: 01-2014
Posts: 542

^
cái #3 là e làm xong rồi đó thím. nhưng tại đọc sách e tưởng "->" nó giống với "." nên thử nhưng ko được. BTW cảm ơn thím

Last edited by giwim 5; 22-05-2018 at 06:48.
Reply With Quote
  #9  
Old 22-05-2018, 11:03
Truantee Truantee is offline
Senior Member
 
Join Date: 05-2016
Posts: 870

Quote:
Originally Posted by giwim 5 View Post
Code:
ptr[count].setName(name);
ptr[count].setAge(age);
Các thím ơi, cái dòng trên e muốn sửa ko dùng dấu chấm mà dùng -> như này:

Code:
ptr[count]->setName(name);
ptr[count]->setAge(age);
sao ko được ạ, có phải vì ptr là array nên ko được ko
cả 2 cái operator [] và -> của c++ đều là syntax sugar
cái [] kiểu a[b] thực ra tương đương với *(a + b)
cái -> kiểu a->b thực ra tương đương với *(a).b

Cậu không có cái pointer nào để deference thì dùng -> làm gì?
Reply With Quote
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT +7. The time now is 12:12.
Chịu trách nhiệm nội dung: Bạch Thành Trung © 2019 Công ty TNHH Thật Vi Diệu
ĐC tầng 4, số 6-8 Đường D2, Bình Thạnh, Hồ Chí Minh, Việt Nam - SĐT 0981323799 - MST 0313906593
Giấy phép thiết lập MXH số 334/GP-BTTTT, Ký ngày: 19/08/2019