01/10/2018, 10:47

Hỏi về while (cin>>x)?

#include <iostream>
#include<vector>
using namespace std;
void arrayFloatOutput(const vector<float>&a){
    for(int i=0;i<a.size();i++)
          cout<<a[i]<<" ";
}
void  arrayFloatInput(vector<float>&a){
    float x;
    while (cin>>x){
    a.push_back(x);
   }
}
void main(){
    vector<float>a;
    cout<<"Input an array,press Ctrl X then Enter to stop:"<<endl;
    arrayFloatInput(a);
    cout<<"Element(s) in the array:";
    arrayFloatOutput(a);
    cout<<endl;
}

Cho mình hỏi với đoạn code trên thì :

  1. Cách dùng lệnh while (cin>>x) như thế mình không hiểu ?
  2. Cái void arrayFloatOutput(const vector<float>&a) thì const có tác dụng gì và nếu bỏ nó thì sẽ ra sao ?
    Cảm ơn các bạn.!
viết 12:53 ngày 01/10/2018

lần sau post code bỏ vô giữa
```
code
```

1 dòng code thì cho vô giữa 2 dấu ` `



  • cin >> x là 1 hàm nhận 2 tham số cinx, và có giá trị trả về là cin.
  • cin là kiểu ostream, nhưng có thể ép kiểu ngầm định thành bool, có giá trị true nếu cin đọc vào ko gặp lỗi, ngược lại nếu gặp lỗi hay gặp end-of-file thì trả về false.
  • while (cin >> x) hiểu là đọc vào biến x 1 số từ cin, nếu cin ko gặp lỗi thì tiếp tục, hoặc đọc vào biến x 1 số từ cin tới khi nào cin gặp lỗi thì dừng




const & là constant reference, reference nghĩa là truyền vào chính biến này, đừng truyền vào bản copy (C++ chịu ảnh hưởng từ C, mặc định truyền tham số thông qua bản copy chứ ko phải bản chính). constant nghĩa là hàm nhận tham số này sẽ hiểu tham số này là hằng số, tức là ko thay đổi nó được. Với vd trên thì bạn gán a[0] = 10; sẽ báo lỗi vì a hiểu là mảng bất biến, hay mảng ko thay đổi, nên ko thay đổi giá trị của a[0] được

nghia viết 12:56 ngày 01/10/2018

1: khi bạn nhập 0 thì chương trình dừng!
2: nó là con trỏ hằng không cho thay đổi giá trị của phần tử con trỏ–> bạn cần tìm hiểu con trỏ hằng và hằng con trỏ.

BOYKAV viết 13:00 ngày 01/10/2018

bạn có tài liệu về cin ko bạn.cho mình xin đọc với ?

Tao Không Ngu. viết 13:03 ngày 01/10/2018

Hi Taivuong95.
Tài liệu chính xác về chương hợp này thì không có tuy nhiên bạn có thể tham khảo qua các doc.

  1. Về std::cin là dòng vào chuẩn kế thừa từ streams cụ thể là std::istream
    http://en.cppreference.com/w/cpp/io/cin

  2. Tài liệu về std::istream nó là một std::basic_istream xem chi tiết toán tử operator>>
    http://en.cppreference.com/w/cpp/io/basic_istream

  3. Tài liệu về toán tử operator>> nó trả về cho bạn std::basic_istream
    http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2

  4. Tài liệu về std::basic_istream.
    http://en.cppreference.com/w/cpp/io/basic_istream

  5. Xem kĩ trong phần Member functions

operator void* (until C++11) 
operator bool (since C++11)

Trước C++11 nó được ép kiểu mặc định về void* từ C++11 ép kiểu về bool. Dùng để check lỗi và kế thừ từ std::basic_ios

checks if no error has occurred (synonym of !fail())
(public member function of std::basic_ios)

std::basic_ios
http://en.cppreference.com/w/cpp/io/basic_ios

BOYKAV viết 13:02 ngày 01/10/2018

cảm ợn bạn nhé ^^

rogp10 viết 12:49 ngày 01/10/2018

iostream là 1 ví dụ mẫu mực về method chaining à mà cin là istream.

Bài liên quan
0