Announcement

Collapse
No announcement yet.

Ai rành về CHUỖI cho em hỏi xí

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ai rành về CHUỖI cho em hỏi xí

    Đề: Đếm bnhiu người họ Lý, Trần trong 1 danh sách họ tên cho trước
    Và đây là thuật toán of mình
    PHP Code:
    #include<stdio.h>
    #include<conio.h>

    main()
    {
       
    int n,deml=0,demt=0;
       
    char chuoi[50][30];

       
    printf("Ban muon nhap vao bao nhieu ten: ");
       
    scanf("%d",&n);

       do
       {
           for(
    int i=0;i<n;i++)
                {
              
    printf("Nhap vao ten thu %d: ",i+1);
             
    gets(chuoi[i]);
              }
       }while(
    n<0||n>100);

       for(
    int j=0;j<n;j++)
           {
           if(
    chuoi[j][0]=='L'&&chuoi[j][1]=='y')
               
    deml++;
           if(
    chuoi[j][0]=='T'&&chuoi[j][1]=='r'&&chuoi[j][2]=='a'&&chuoi[j][3]=='n')
               
    demt++;
          }

       if(
    demt>&& deml>0)
           {
              
    printf("Danh sach tren co %d nguoi ho Ly.\n",deml);
             
    printf("Danh sach tren co %d nguoi ho Tran.",demt);
          }
       else
           
    printf("Khong co nguoi nao thuoc ho Ly hay Tran.");

       
    getch();

    Mọi thứ đều thuận lợi trừ việc... Ví dụ em muốn nhập vào danh sách gồm 5 tên đầu tiên em gõ số '5' x0g nó in ra "Nhâp vào tên người thứ 1: Nhâp vào tên người thứ 2: " nó không cho em nhập người thứ 1 (
    Em đã thử đổi scanf, bõ do while, làm từa lưa nhưng cũng k đc... không bjk lỗi là do đâu mong các bác chỉ giúp... mấy bài Chuỗi này làm em tốn chứt xám qá (

  • #2
    Bạn làm sạch stdin nhớ :d
    fflush(stdin);
    đặt hàm này này sau hàm scanf();
    hàm scan ở trên làm trôi mất hàm gets() đầu tiên của vòng lặp :d

    Comment


    • #3
      Originally posted by 11520132 View Post
      Bạn làm sạch stdin nhớ :d

      đặt hàm này này sau hàm scanf();
      hàm scan ở trên làm trôi mất hàm gets() đầu tiên của vòng lặp :d
      hix cái này thầy mình chưa dạy dù s cũng thanks bạn nhé :sweat:

      Comment


      • #4
        Originally posted by 11520132 View Post
        Bạn làm sạch stdin nhớ :d

        đặt hàm này này sau hàm scanf();
        hàm scan ở trên làm trôi mất hàm gets() đầu tiên của vòng lặp :d
        fflush(stdin) =]]]]]]]]]]]]]]]]]]]]]]]]]
        Be different and always different
        http://archlinuxvn.org/
        http://theslinux.org
        http://lab.infosec.xyz

        Comment


        • #5
          Originally posted by 11520132 View Post
          Bạn làm sạch stdin nhớ :d

          đặt hàm này này sau hàm scanf();
          hàm scan ở trên làm trôi mất hàm gets() đầu tiên của vòng lặp :d
          Chí lí đấy !
          Mình vì mọi người =====> Mọi người sẽ xem mình như mọi :waaaht:

          My Facebook

          Comment


          • #6
            Originally posted by 11520393 View Post
            Chí lí đấy !
            cái hàm đó là undefine behavior chỉ chạy trên một số compiler thôi. Không phải chuẩn nên toi khuyên bạn không nên dùng :-). Ăn một infaction (
            Be different and always different
            http://archlinuxvn.org/
            http://theslinux.org
            http://lab.infosec.xyz

            Comment


            • #7
              bạn kết thúc việc nhập bằng cách nhấn phím enter. phím này sẽ lưu lại trong bộ đệm(?), khi bạn dùng gets thì hàm này sẽ vào vùng nhớ này để lấy dữ liệu ra( dữ liệu mà gets lấy là 1 chuỗi cách nhau bởi kí tự enter). nếu không có dữ liệu thì gets sẽ chờ người dùng nhập. trường hợp của bạn là trong bộ đệm đã có dữ liệu(phím enter), do đó, khi gọi gets thì tất nhiên cái chuỗi bạn nhận được chỉ là kí tự enter. và có vẻ như là hàm gets đó bị "trôi". kinh nghiệm của mình là bạn nên để fflush(stdin) trước mỗi câu lệnh gets để xóa sạch bộ đệm bàn phím, tránh được trường hợp trôi hàm gets.

              Comment

              LHQC

              Collapse
              Working...
              X