Không nhập được bằng hàm fgets()

Dạ em gặp vấn đề với fget() trong C++ ạ.
Khi chạy chương trình em không nhập được, các bác fix dùm e với ạ :slight_smile:

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char chon;
    do{
        cout<<"+--------------MENU--------------+"<<endl;
        cout<<"+ 1. Dem nguyen am, phu am       +"<<endl;
        cout<<"+ 2. Dang nhap                   +"<<endl;
        cout<<"+ 3. Sap xep chuoi               +"<<endl;
        cout<<"+ 4. Thoat                       +"<<endl;
        cout<<"+--------------------------------+"<<endl;
        cout<<"Moi ban chon menu (1,2,3,4): ";
        cin>>chon;
        
        switch(chon)
        {
            case '1':
            {
                cout<<"CT Dem nuyen am, phu am"<<endl;
	            char chuoi[100];
	            cout<<"Moi nhap vao chuoi: ";
	            fgets(chuoi,100,stdin);
	            int i=0;
	            int n=0;
	            int p=0;
	            while(chuoi[i++]!='\0')
	            {
		            if(chuoi[i]=='a' || chuoi[i]=='e'|| chuoi[i]=='u' || chuoi[i]=='i'|| chuoi[i]=='o')
		            {
			                n++;
		            }
		            else
		            {
			        p++;
		            }
	             }
	            cout<<"Chuoi '"<<chuoi<<"' co chua "<<n<<" so nguyen am "<<p<<" phu am"<<endl;
            }
        
            break;
            
            case '2':
            {
                cout<<"CT Dang nhap"<<endl;
                char username[]="admin";
                char password[]="12345";
                char user[100];
                char pass[100];
                cout<<"Moi nhap username: ";
                fgets(user,100,stdin);
                cout<<"Moi nhap password: ";
                fgets(pass,100,stdin);
                if(user == username && pass == password)
                {
                    cout<<"Dang nhap thanh cong"<<endl;
                }
                else
                {
                    cout<<"Dang nhap khong thanh cong"<<endl;
                }
            }
            break;
            
            case '3':
            {
			
                cout<<"CT Sap xep chuoi"<<endl;
                char s[5][20], t[20];
                int i,j;
                cout<<"Moi ban nhap chuoi: "<<endl;
                for(int i=0; i<5; i++)
                {
                    fgets(s[i],5,stdin);
                }
                for(int i=1; i<5; i++)
                {
                    for(int j=1; j<5; j++)
                    {
                        if(strcmp(s[j-1], s[j])>0)
                        {
                            strcpy(t,s[j-1]);
                            strcpy(s[j-1],s[j]);
                            strcpy(s[j],t);
                        }
                    }
                }
                cout<<"Chuoi da sap xep la: "<<endl;
                for(int i=0; i<5; i++)
                {
                    cout<<s[i];
                }
            }
            break;
            
            case '4':
            {
                cout<<"Thoat"<<endl;
                return 0;
            }
            break;
            
            default:
            {
                cout<<"Ban chon sai menu (1,2,3,4)"<<endl;
            }
        }
        
    }
    while(chon<1 || chon>4);

    return 1;
}

Không được thế nào?

Có gì không ổn lắm. :thinking:

2 Likes

mình chạy chương trình thì bài 1 và bài 2 không cho nhập chuỗi

đây là để dạng menu gộp 3 bài vào 1 chương trình thì có vấn đề, nếu tách riêng thành từng bài 1 thì lại ok, chả hiểu sao nữa, bác nào có dev c hoặc visual thì chạy hộ em cái code trên là khắc thấy vấn đề ngay

Không phải không cho nhập. Vì bạn nhấn Enter khi chọn số phải không.

2 Likes

đúng rồi thì chả nhấn enter thì nhấn gì ạ

  1. Bạn nhập luôn số cần chọn và chuỗi trên 1 dòng. Kiểu vầy: 1 dem so luong phu am va nguyen amEnter.
  2. Dùng cin.ignore() trước khi gọi gets() nào có cin >> số.
    Nếu trước đó có nhập số và nhập chuỗi sau đó thì dùng cin.ignore() chèn vào giữa. Nhằm loại bỏ kí tự \n (Enter).
int n;
char str1[100];
char str2[100];
cin >> n;
cin.ignore(); // Loại bỏ kí tự xuống dòng.
gets(str1, 100, stdin);
// Không cần cin.ignore()
gets(str2, 100, stdin);
2 Likes

mình chưa hiểu lắm, tại vì mình chưa học phần này bạn có thể fix case1 và case2 dựa trên code gốc của mình được không??

bạn ơi mình làm được rồi nhé ! cảm ơn bạn nhiều nhiều :)))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?