Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: không hiểu tại sao vòng while bị lỗi!

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

    Mặc định không hiểu tại sao vòng while bị lỗi!

    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #include <string.h>
    4.  
    5. main()
    6.  
    7. {       int i,dem=0;
    8.       char name[100];
    9.  
    10.       printf("nhap mot xau ky tu "); scanf("%[^\n]",&name);
    11.       printf("name3443=%s",name);
    12.  
    13.  
    14.       for(i=0;name[i]!='\0';)
    15.         { printf("\nname=%c",name[i]);
    16.  
    17.           while(name[i]==' '||name[i]=='\t') //no chay toi day thi khong hieu j nua!
    18.                  {
    19.  
    20.                  printf("\nname=%s",name[i]);
    21.                        i++;
    22.                  }
    23.           while(name[i]!=' '&&name[i]!='\t')
    24.                  {
    25.                  i++;
    26.                  printf("\nname=%s",name[i]);
    27.                  }
    28.              dem++;
    29.          }
    30.       printf("\ndemkjhih=%d",dem);
    31.       getch();
    32.  
    33.  
    34. }





    Note:Bạn vui lòng cho code vào tag code.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi comeonbaby : 29-03-2008 lúc 10:27 AM.

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

    Bạn phải đưa đề bài ra thì mọi người mới biết ý định của bạn là làm gì chứ??
    ttecak ?

  3. #3
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Cái i++ đó không sai thì tui mới lạ, thao tác tên string thì nên dùng con trỏ dễ hơn nhiều :
    C Code:
    1. #include <cstdio>
    2. #include <cstring>
    3.  
    4. int main(){      
    5.   char *is;
    6.   int space = 0, tab = 0, reg = 0;
    7.   char name[10];
    8.  
    9.   printf("nhap mot xau ky tu ");
    10.   gets(name);
    11.   is = name;
    12.   for(;*is != '\0'; ++is){
    13.     if(*is == ' ')
    14.       space++;
    15.     else if(*is == '\t')
    16.       tab++;
    17.     else
    18.       reg++;
    19.   }
    20.  
    21.   printf("space and tab characters = %d, = %d \n", tab, space);
    22.   printf("regular characters = %d \n", reg);
    23.  
    24.   return 0;
    25. }

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi Fhuy Xem bài viết
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #include <string.h>
    4.  
    5. main()
    6.  
    7. {       int i,dem=0;
    8.       char name[100];
    9.  
    10.       printf("nhap mot xau ky tu "); scanf("%[^\n]",&name);
    11.       printf("name3443=%s",name);
    12.  
    13.  
    14.       for(i=0;name[i]!='\0';)
    15.         { printf("\nname=%c",name[i]);
    16.  
    17.           while(name[i]==' '||name[i]=='\t') //no chay toi day thi khong hieu j nua!
    18.                  {
    19.  
    20.                  printf("\nname=%s",name[i]);
    21.                        i++;
    22.                  }
    23.           while(name[i]!=' '&&name[i]!='\t')
    24.                  {
    25.                  i++;
    26.                  printf("\nname=%s",name[i]);
    27.                  }
    28.              dem++;
    29.          }
    30.       printf("\ndemkjhih=%d",dem);
    31.       getch();
    32.  
    33.  
    34. }
    Vấn đề nằm ở đoạn code này
    Code:
        while(name[i]!=' '&&name[i]!='\t')
                     {
                     i++;
                     printf("\nname=%s",name[i]);
                     }
    + Hình như bạn quên mất thằng '\0'
    + i++ ở đây không sai.Nhưng nó sẽ dẫn đến việc là dòng cuối cùng sẽ in ra mang ký tự rỗng
    + 1 Lỗi sai cơ bản ơ đây nữa là name[i] là 1 char mà bạn lại bắt thằng printf xuất ra 1 xâu(%s) thì đúng là chơi khó nó rồi
    Tôi sửa lại đoạn code trên như sau
    Code:
     while(1)
                     { 
                   ++i;
                   if(name[i]=='\0')
    {
    break;
    }  
                 printf("\nname=%c",name[i]);
                   }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Kỹ thuật C++ Nhập và gán 1 kí tự trong vòng lặp sao cho khi không nhập kí tự thì vòng lặp lại chạy tiếp.
    Gửi bởi note194 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 12-08-2013, 09:11 PM
  2. Lập trình C++ giá trị của xâu trong vòng lặp và ngoài vòng lặp khác nhau
    Gửi bởi virus93ttll trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 14-05-2011, 02:43 PM
  3. Code cài đặt DSLK đơn vòng và kép vòng trên C++. Thêm 1 phần tử sau 1 phần tử trong DSLK đơn/kép
    Gửi bởi hoanghieu.fit.hcmus trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 09-04-2011, 02:54 PM
  4. Tìm max (Sử dụng vòng lặp)
    Gửi bởi cr9 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 13
    Bài viết cuối: 08-05-2010, 10:53 AM
  5. Vòng lặp for lồng nhau, giúp tớ hiểu rõ hơn về vòng lặp for lồng nhau?
    Gửi bởi bk7million trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 29-04-2009, 07:46 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