Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Cho minhf hỏi 2 câu lệnh này khác nhau thế nào?

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    2

    Question Cho minhf hỏi 2 câu lệnh này khác nhau thế nào?

    Cho mình hỏi 2 câu lệnh này khác nhau thế nào:
    int name_char;
    const int SIZE = 20;
    char name[SIZE];

    // câu thứ 1:
    name_char = std::strlen(name); //đã sử dụng header cstring

    và:

    //câu thứ 2:
    while(name[SIZE] != '\0')
    name_char++;

    Cả 2 câu lệnh đều nhằm mục đính đếm số ký tự trong mảng name.
    chương trình gần như crash khi mình sử dụng câu lệnh thứ hai. Mình đang dùng VS2005.
    Giúp mình với. Cám ơn nha!

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Lang thang
    Bài viết
    7

    đúng là cả hai câu lệnh này đều nhằm mục đích đếm số ký tự hiện có trong mảng name.Câu lệnh thứ nhất sử dụng hàm strlen(*char) trong thư viện string.h,hàm này trả lại số ký tự của mảng mà không tính đến ký tự '\0'.Câu lệnh thứ hai của bạn sai là vì hai nguyên do:thứ nhất bạn chưa khởi tạo name_char,thứ hai cách mà bạn truyền mảng name cho câu lệnh while là sai,vì trong while ta không thấy biến chạy có giá trị thay đổi sau mỗi vòng lặp,theo mình sửa như sau:
    Code:
    int i;//Biến chạy.
    i = 0;
    name_char = 0;
    while( name[i] != '\0' )
    {
          name_char++;
          i++;
    }
    Người đẹp lại lấy người xinh.bao nhiêu kẻ xấu rập rình lấy nhau !!!

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    2

    Bài mình lấy từ trong sách ra đó.
    Ví dụ trong sách chạy ngon ơ. Thậm chí nó không thèm nhận biết các ký tự vượ t quá ký tự thứ 20.
    còn bài mình thì quá 20 ký tự nó chạy vô hạn 1 cái vòng lặp vốn không vô hạn ở phía dưới.
    Có gì mong các bạn chỉ giáo.
    Đây là ví dụ trong sách:
    PHP Code:
    // EX4_03.CPP
    // Counting string characters
    #include <iostream>
    using std::cin;
    using std::cout;
    using std::endl;

    int main()
    {
       const 
    int MAX 80;                
       
    char buffer[MAX];                 
       
    int count 0;                   
       
    cout << "Enter a string of less than 80 characters:\n";
       
    cin.getline(bufferMAX'\n');    
       while(
    buffer[count] != '\0')       
          
    count++;                       

       
    cout << endl
            
    << "The string \"" << buffer
            
    << "\" has " << count << " characters.";
       
       
    cout << endl;
       return 
    0;

    Đã được chỉnh sửa lần cuối bởi puyoberry : 22-12-2007 lúc 01:15 AM.

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    Lang thang
    Bài viết
    7

    hì hì ví dụ trong sách chạy ngon ơ là đúng rồi.Vì họ truyền cho câu lệnh while mảng buffer[count], trong khi đó bản thân count lại là một biến chạy,giá trị của nó được tăng lên sau mỗi vòng lặp.Còn trong chương trình của cậu lại truyền cho while mảng name[SIZE],mà như khai báo SIZE là một hằng nên giá trị của nó không thể bị thay đổi,mà hơn nữa mình cũng không thấy biến chạy trong vòng lặp while của cậu.
    Người đẹp lại lấy người xinh.bao nhiêu kẻ xấu rập rình lấy nhau !!!

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    2

    phần khai báo là mình khai báo chung cho cả 2 câu lệnh. Chỉ thế chỗ 2 câu lệnh với nhau thôi.
    Biến MAX của sách tương đương với SIZE đều là hằng đấy thôi. Phần của mình giống hệt sách mà, chỉ khác tên, vậy mà vẫy không chạy dc.
    Đã được chỉnh sửa lần cuối bởi puyoberry : 22-12-2007 lúc 09:34 AM.

  6. #6
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Mặc định Cho minhf hỏi 2 câu lệnh này khác nhau thế nào?

    Bạn nhìn vào câu lệnh thứ 2
    while(name[SIZE] != '\0')
    nam_char++;
    name[SIZE] ko hề thay đổi trong vòng lặp, nó sẽ lặp đến tràn số.
    Bạn có thể sửa nó thành như thế này:
    while(*name !='\0')
    {
    name++;
    name_char++;
    }

  7. #7
    Ngày gia nhập
    12 2007
    Bài viết
    2

    Cám ơn các bạn. Mình biết mình sai ở đâu rồi !
    Cám ơn nhiều nha. E rằng mình sẽ còn phải hỏi các bạn dài dài.
    Có hỏi ngu thì mong các bạn thông cảm

Các đề tài tương tự

  1. Bài tập C %i và %d khác nhau như thế nào???
    Gửi bởi vungtroicuabo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 30-05-2017, 02:46 PM
  2. Lập trình C Sự khác nhau giữa For và While như thế nào?
    Gửi bởi LeoChip trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 03-10-2012, 01:21 AM
  3. SƠ ĐỒ DỮ LIỆU, SƠ ĐỒ LUỒNG DỮ LIỆU giống và khác nhau thế nào?
    Gửi bởi nguyenvanbaoanh trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 1
    Bài viết cuối: 22-07-2011, 02:51 PM
  4. Lập trình C Sự khác nhau giữa *a[10] với (*a)[10] như thế nào?
    Gửi bởi muramasa trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 06-06-2011, 06:04 PM
  5. Mỗi con trỏ trỏ đếm một mảng khác nhau như thế nào?
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 03-12-2010, 04:18 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn