Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Các bạn chỉ mình xem code này bị lỗi ở đâu với ạ.

    Mình cần nhập danh sách tên người+số dt+ địa chỉ, rồi nhập 1 số điện thoại, tìm xem ai có số đó, phần tìm đó mình bị nhầm, bạn nào sửa hộ mình với ạ.

    Code đây


    Mã:
     #include <iostream.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#define MAX 100typedef char mang[40];struct danhba{    mang ten,diachi,sodt;}; using namespace std; main(){    int n,i; danhba a[MAX]; mang dt;    system("CLS");    cout<<"Nhap so nguoi:"; cin>>n;    cin.get(); // loai bo dau Enter o bo nho dem !    for (i=1; i<=n; i++)        {            cout<<"------------------------------------------------"<<endl;            cout<<"Nhap thong tin ve nguoi thu "<<i<<" :"<<endl;            cout<<"Nhap ten :"; gets(a[i].ten);            cout<<"Nhap dia chi:"; gets(a[i].diachi);            cout<<"Nhap so dien thoai:"; gets(a[i].sodt);        }    system("CLS");    cout<<"============================================="<<endl;    cout<<"In ra danh sach vua nhap :"<<endl;    cout<<"============================================="<<endl;    for (i=1; i<=n; i++)        {            cout<<"--------------------------------------------------"<<endl;            cout<<"Thong tin cua nguoi thu "<<i<<" :"<<endl;            cout<<"Ten :"<<a[i].ten<<endl;            cout<<"Dia chi:"<<a[i].diachi<<endl;            cout<<"So dien thoai:"<<a[i].sodt<<endl;        }    cout<<"Nhap so dien thoai can tim:"; gets(dt);    cout<<"Thong tin ve nguoi co so dien thoai "<<dt<<" la:"<<endl;    for (i=1; i<=n; i++)    if ((a[i].sodt)==dt)    {            cout<<"Ten :"<<a[i].ten<<endl;            cout<<"Dia chi :"<<a[i].diachi<<endl;            cout<<"So dien thoai :"<<a[i].sodt<<endl;        }}
    hình như là sai ở chỗ
    if ((a[i].sodt)==dt)
    nhưng mình chả hiểu tại sao ?

  2. #2
    Ngày tham gia
    Sep 2015
    Đang ở
    hà nội
    Bài viết
    0
    Chỗ đó là strcmp .

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi daogiahieu
    Thế ra là không thể so sánh được 2 cái a[i].sodt) và dt kia à bạn ?
    không so sánh được là do:

    Mã:
    typedef char mang[40];//mang la charmang ten,diachi,sodt;// suy ra sodt cung la char
    vậy thì bạn phải dùng strcmp mới so sánh được.
    còn muốn so sánh a[i].sodt với dt thì bạn phải chỉnh là:

    Mã:
    mang ten,diachi;//,sodt;che cái đây lạiint sodt;//đưa xuống đây

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Chỗ đó là strcmp .
    Cảm ơn bạn, mình sửa thành như sau thì được rồi [IMG]images/smilies/smile.png[/IMG]

    Mã:
    for (i=1; i<=n; i++)    if (strcmp(dt,a[i].sodt)==0)    {            cout<<"Ten :"<<a[i].ten<<endl;            cout<<"Dia chi :"<<a[i].diachi<<endl;            cout<<"So dien thoai :"<<a[i].sodt<<endl;    }
    Thế ra là không thể so sánh được 2 cái a[i].sodt) và dt kia à bạn ?

  5. #5
    Trích dẫn Gửi bởi caovuhoangnam
    không so sánh được là do:

    Mã:
    typedef char mang[40];//mang la charmang ten,diachi,sodt;// suy ra sodt cung la char
    vậy thì bạn phải dùng strcmp mới so sánh được.
    còn muốn so sánh a[i].sodt với dt thì bạn phải chỉnh là:

    Mã:
    mang ten,diachi;//,sodt;che cái đây lạiint sodt;//đưa xuống đây
    Cảm ơn bạn [IMG]images/smilies/biggrin.png[/IMG], tiện đây cho mình hỏi luôn vấn đề này với, đỡ phải lập topic mới ạ.
    Nếu mình muốn in ra danh sách cho cân như thế này
    Mã:
     Tên học sinh | Ngày tháng năm sinh | Điểm Trung Bình|
     ----------------|--------------------------|---------------------
    1. Nguyên Văn A|  05/09/1992         |9.0
    2. Phạm Văn B   |  12/7/ 1992          | 8.8
    3. Nguyên Văn Hải C | 30/6/1992     | 9.7
    Kiểu thế cho nó thẳng hàng với nhau với mọi độ dài tên thì có cách nào không bạn nhỉ ?

    Với cả trước mình học pascal có thể khai báo là
    a:array[4..10] of integer;
    a:array['A'..'Z'] of integer;
    thế trong C,C++ có thể khai báo được như thế không nhỉ ?, tức là biết trước giá trị nhỏ nhất, lớn nhất của số phần tử mảng ấy ?

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    C++ có std::setw, ios::left, right gì đó mà [IMG]images/smilies/smile.png[/IMG]

    Mà cái kí hiệu đó ko phải là max-min của mảng đâu, nó là dạng thô thiển của content-addressable đó.

  7. #7
    Trích dẫn Gửi bởi prog10
    C++ có std::setw, ios::left, right gì đó mà [IMG]images/smilies/smile.png[/IMG]

    Mà cái kí hiệu đó ko phải là max-min của mảng đâu, nó là dạng thô thiển của content-addressable đó.
    Thế mình muốn khai báo
    a:array['A'..'Z'] of integer;
    trong C,C++ có cái nào tương tự không nhỉ ?
    tại mình muốn tính số lần xuất hiện của từng chữ cái trong xâu thô [IMG]images/smilies/smile.png[/IMG]
    trong pascal trước thì là
    for i:=1 to length(st) do
    a[st[i]]=a[st[i]]+1;
    giờ trong C,C++ muốn làm thế thì phải sao nhỉ ?
    còn cái std::setw, ios::left, right bạn viết thử cho mình như mình cần được không ạ ?
    thanks bạn đã trả lời.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ^

    Mã:
    char* c=s;for(; *c!='\0'; ++c) a[*c-'A']++; //lưu ý C/C++ đánh chỉ số từ 0

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    ^

    Mã:
    char* c=s;for(; *c!='\0'; ++c) a[*c-'A']++; //lưu ý C/C++ đánh chỉ số từ 0
    thanks bạn [IMG]images/smilies/smile.png[/IMG]. Bạn có thể giải thích cho mình trong dòng code này là c đi bắt đầu từ đâu đến đâu vậy nhỉ ?
    vì mình thấy c gán = xâu s sao lại cộng thêm được ?
    với cả chỗ a[*c-'A']++ tức là sao nhỉ ?, sao nó lại tuơng đuơng a[st[i]]=a[st[i]]+1; được ?
    sao lại trừ 'A' nữa ?

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    À, cái này là viết theo C [IMG]images/smilies/smile.png[/IMG]

    1. c và s đều là con trỏ, mà con trỏ cũng chỉ là số nên làm tính đc.
    2. *c có nghĩa là giá trị của ô nhớ c.
    3. Chỉ số mảng bắt đầu từ 0 nên phải trừ A.


    Mã:
    #include <string>//....std::string s;//.... int x=s.length();for(int i=0; i<x; ++i)   a[i-'A']++;

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •