30/09/2018, 16:11

Code đưa vào switch case chạy không ổn định?

Mình có một chương trình chính, trong chương trình này sẽ có nhiều chương trình còn dạng menu như sau

cout<<"1.Tim X = {x thuoc S1 hoac x thuoc S2}"<<endl;
        cout<<"2.Tim X = {x thuoc S1 va x thuoc S2}"<<endl;
        cout<<"3.Tim X = {x thuoc S1 va x khong thuoc S2}"<<endl;
        cout<<"4.Tim tap ky tu va so lan xuat hien moi ky tu trong ca S1, S2 (Không ke ky tu trong)"<<endl;
        cout<<"5.Tim tap ky tu va so lan xuat hien moi ky tu thuoc ca S1, S2 (Không ke ky tu trong)"<<endl;
        cout<<"6.Tim tap ky tu va so lan xuat hien moi ky tu thuoc S1 nhung khong thuoc S2 (Không ke ky tu trong)"<<endl;
        cout<<"7.ma hoa x bang ky thuat chan le"<<endl;
        cout<<"8.giai ma x bang ky thuat chan le"<<endl;
        cout<<"9.tim tap tu va so lan xuat hien moi tu trong s1 hoac s2 "<<endl;
        cout<<"10.tim tap tu va so lan xuat hien moi tu trong s1 va s2"<<endl;
        cout<<"11.tim tap tu va so lan xuat hien moi tu trong s1 nhung khong xh trong s2"<<endl;

Tuy nhiên menu 2 có lỗi, ở bài 2 là tìm các kí tự thuộc cả 2 xâu. Hàm search của mình là kiểm tra xem kí tự s có thuộc xâu a hay không rồi return 0 hoặc 1.

Đây là toàn bộ code

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

typedef struct
{
    char kitu;
    int solan;
} word;

int search(char s,char *a)
{
    for(int i=0; i<=strlen(a)-1; i++)
    {
        if(s==a[i]) return 1;
    }
    return 0;
}
int main()
{
    int dung=1,bai;
    do
    {
        system("cls");
        cout<<"1.Tim X = {x thuoc S1 hoac x thuoc S2}"<<endl;
        cout<<"2.Tim X = {x thuoc S1 va x thuoc S2}"<<endl;
        cout<<"3.Tim X = {x thuoc S1 va x khong thuoc S2}"<<endl;
        cout<<"4.Tim tap ky tu va so lan xuat hien moi ky tu trong ca S1, S2 (Không ke ky tu trong)"<<endl;
        cout<<"5.Tim tap ky tu va so lan xuat hien moi ky tu thuoc ca S1, S2 (Không ke ky tu trong)"<<endl;
        cout<<"6.Tim tap ky tu va so lan xuat hien moi ky tu thuoc S1 nhung khong thuoc S2 (Không ke ky tu trong)"<<endl;
        cout<<"7.ma hoa x bang ky thuat chan le"<<endl;
        cout<<"8.giai ma x bang ky thuat chan le"<<endl;
        cout<<"9.tim tap tu va so lan xuat hien moi tu trong s1 hoac s2 "<<endl;
        cout<<"10.tim tap tu va so lan xuat hien moi tu trong s1 va s2"<<endl;
        cout<<"11.tim tap tu va so lan xuat hien moi tu trong s1 nhung khong xh trong s2"<<endl;
        cout<<"nhap bai: ";
        cin>>bai;
        switch(bai)
        {
        case 1:
        {
            char a[20],b[20],c[20];
            cout<<"nhap xau a: ";
            fflush(stdin);
            cin>>a;
            cout<<"nhap xau b: ";
            fflush(stdin);
            cin>>b;
            strcat(a,b);
            int m=0;
            for(int i=0; i<=strlen(a); i++)
            {
                if(search(a[i],c)==0)
                {
                    c[m]=a[i];
                    m++;
                }
            }
            for(int i=0; i<=m-1; i++) cout<<c[i];
            break;
        }
        case 2:
        {
            char a[20],b[20],c[20];
            cout<<"nhap xau a: ";
            fflush(stdin);
            cin>>a;
            cout<<"nhap xau b: ";
            fflush(stdin);
            cin>>b;
            int m=0;
            for(int i=0; i<=strlen(a)-1; i++)
            {
                if(search(a[i],b) && search(a[i],c)==0)
                {
                    c[m]=a[i];
                    m++;
                }
            }
            for(int i=0; i<=m-1; i++) cout<<c[i];
            break;
        }
        case 3:
        {
            char a[20],b[20],c[20];
            cout<<"nhap xau a: ";
            fflush(stdin);
            cin>>a;
            cout<<"nhap xau b: ";
            fflush(stdin);
            cin>>b;
            int m=0;
            for(int i=0; i<=strlen(a)-1; i++)
            {
                if(search(a[i],b)==0)
                {
                    c[m]=a[i];
                    m++;
                }
            }
            for(int i=0; i<=m-1; i++) cout<<c[i];
            break;
        }
        case 4:
        {
            word x[20];
            char a[20],b[20],c[20];
            cout<<"nhap xau a: ";
            fflush(stdin);
            cin>>a;
            cout<<"nhap xau b: ";
            fflush(stdin);
            cin>>b;
            strcat(a,b);
            int m=0;
            for(int i=0; i<=strlen(a)-1; i++)
            {
                if(search(a[i],c)==0)
                {
                    c[m]=a[i];
                    x[m].kitu=a[i];
                    x[m].solan=1;
                    m++;
                }
                else
                {
                    for(int j=0; j<=m-1; j++)
                    {
                        if(x[j].kitu==a[i]) x[j].solan++;
                    }
                }
            }
            for(int i=0; i<=m-1; i++) cout<<"ki tu "<<x[i].kitu<<" xuat hien "<<x[i].solan<<" lan"<<endl;
            break;
        }
        }
        cout<<endl;
        cout<<"nhap 0 de dung lai,1 de tiep tuc";
        cin>>dung;
    }
    while(dung==1);
}

Vấn đề là nếu để riêng cái case 2 sang 1 bài khác thì ra kết quả còn đưa vào bài thì lại không cho ra kết quả. Mọi người có thể cho mình biết lý do tại sao không?

Đỗ Trung Quân viết 18:25 ngày 30/09/2018

Mình sửa lại bài viết của bạn rồi nhé. Bạn xem cách chèn code vào bài viết tại đây

Cách Dùng markdown chèn code trong diễn đàn

Nguyễn Minh Dũng viết 18:23 ngày 30/09/2018

Mình thấy code chạy khá ổn mà, nhưng mà để nhập chuỗi có khoảng trắng thì dùng gets chứ đừng dùng cin

 case 2:
        {
            char a[20],b[20],c[20];
            cout<<"nhap xau a: ";
            fflush(stdin);
            gets(a);
            cout<<"nhap xau b: ";
            fflush(stdin);
            gets(b);
            int m=0;
            for(int i=0; i<=strlen(a)-1; i++)
            {
                if(search(a[i],b) && search(a[i],c)==0)
                {
                    c[m]=a[i];
                    m++;
                }
            }
            for(int i=0; i<=m-1; i++) cout<<c[i];
            break;
        }

Tuy nhiên @nguyenhongnhu thiết kế chương trình như vậy là không ổn. Nên viết như sau để sau này sửa lỗi nó dễ hơn

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

typedef struct
{
    char kitu;
    int solan;
} word;

int search(char s,char *a)
{
    for(int i=0; i < strlen(a); i++)
    {
        if(s==a[i])
            return 1;
    }
    return 0;
}

int menu()
{
    int bai = 0;
    system("cls");
    cout<<"0.Thoat"<<endl;
    cout<<"1.Tim X = {x thuoc S1 hoac x thuoc S2}"<<endl;
    cout<<"2.Tim X = {x thuoc S1 va x thuoc S2}"<<endl;
    cout<<"3.Tim X = {x thuoc S1 va x khong thuoc S2}"<<endl;
    cout<<"4.Tim tap ky tu va so lan xuat hien moi ky tu trong ca S1, S2 (Không ke ky tu trong)"<<endl;
    cout<<"5.Tim tap ky tu va so lan xuat hien moi ky tu thuoc ca S1, S2 (Không ke ky tu trong)"<<endl;
    cout<<"6.Tim tap ky tu va so lan xuat hien moi ky tu thuoc S1 nhung khong thuoc S2 (Không ke ky tu trong)"<<endl;
    cout<<"7.ma hoa x bang ky thuat chan le"<<endl;
    cout<<"8.giai ma x bang ky thuat chan le"<<endl;
    cout<<"9.tim tap tu va so lan xuat hien moi tu trong s1 hoac s2 "<<endl;
    cout<<"10.tim tap tu va so lan xuat hien moi tu trong s1 va s2"<<endl;
    cout<<"11.tim tap tu va so lan xuat hien moi tu trong s1 nhung khong xh trong s2"<<endl;
    cout<<"nhap bai: ";
    cin>>bai;
    return bai;
}

void tim_x_1()
{
    char a[20],b[20],c[20];
    cout<<"nhap xau a: ";
    fflush(stdin);
    cin>>a;
    cout<<"nhap xau b: ";
    fflush(stdin);
    cin>>b;
    strcat(a,b);
    int m=0;
    for(int i=0; i<=strlen(a); i++)
    {
        if(search(a[i],c)==0)
        {
            c[m]=a[i];
            m++;
        }
    }
    for(int i=0; i<=m-1; i++) cout<<c[i];
    cout << "\nNhan phim bat ky de tiep tuc\n";
    getchar();
}

void tim_x_2()
{
    char a[20],b[20],c[20];
    cout<<"nhap xau a: ";
    fflush(stdin);
    gets(a);
    cout<<"nhap xau b: ";
    fflush(stdin);
    gets(b);
    int m=0;
    for(int i=0; i<=strlen(a)-1; i++)
    {
        if(search(a[i],b) && search(a[i],c)==0)
        {
            c[m]=a[i];
            m++;
        }
    }
    for(int i=0; i<=m-1; i++)
        cout<<c[i];
    cout << "\nNhan phim bat ky de tiep tuc\n";
    getchar();
}

void tim_x_3()
{
    char a[20],b[20],c[20];
    cout<<"nhap xau a: ";
    fflush(stdin);
    cin>>a;
    cout<<"nhap xau b: ";
    fflush(stdin);
    cin>>b;
    int m=0;
    for(int i=0; i<=strlen(a)-1; i++)
    {
        if(search(a[i],b)==0)
        {
            c[m]=a[i];
            m++;
        }
    }
    for(int i=0; i<=m-1; i++)
        cout<<c[i];
    cout << "\nNhan phim bat ky de tiep tuc\n";
    getchar();
}

void tim_tap_ky_tu_4()
{
    word x[20];
    char a[20],b[20],c[20];
    cout<<"nhap xau a: ";
    fflush(stdin);
    cin>>a;
    cout<<"nhap xau b: ";
    fflush(stdin);
    cin>>b;
    strcat(a,b);
    int m=0;
    for(int i=0; i<=strlen(a)-1; i++)
    {
        if(search(a[i],c)==0)
        {
            c[m]=a[i];
            x[m].kitu=a[i];
            x[m].solan=1;
            m++;
        }
        else
        {
            for(int j=0; j<=m-1; j++)
            {
                if(x[j].kitu==a[i]) x[j].solan++;
            }
        }
    }
    for(int i=0; i<=m-1; i++)
        cout<<"ki tu "<<x[i].kitu<<" xuat hien "<<x[i].solan<<" lan"<<endl;
    cout << "\nNhan phim bat ky de tiep tuc\n";
    getchar();
}
int main()
{
    int tieptuc=1;
    do
    {
        switch(menu())
        {
        case 0:
            tieptuc = 0;
            break;
        case 1:
            tim_x_1();
            break;
        case 2:
            tim_x_2();
            break;
        case 3:
            tim_x_3();
            break;
        case 4:
            tim_tap_ky_tu_4();
            break;
        default:
            cout << "nhap loi\n";
            break;
        }
    }
    while(tieptuc);
}
Chỉnh Sửa viết 18:23 ngày 30/09/2018

bài này mình sửa lại chạy được rồi nhưng mà vẫn còn 1 lỗi

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

typedef struct{
	char kitu;
	int solan;
}word;

int search(char s, char *a){
	int t = strlen(a) - 1;
	for (int i = 0; i <= t; i++){
		if (s == a[i]) return 1;
	}
	return 0;
}

int main(){
	int dung;
	do
	{
		system("cls");
		int bai;
		cout << "1.Tim X = {x thuoc S1 hoac x thuoc S2}" << endl;
		cout << "2.Tim X = {x thuoc S1 va x thuoc S2}" << endl;
		cout << "3.Tim X = {x thuoc S1 va x khong thuoc S2}" << endl;
		cout << "4.Tim tap ky tu va so lan xuat hien moi ky tu trong ca S1, S2 (Không ke ky tu trong)" << endl;
		cout << "5.Tim tap ky tu va so lan xuat hien moi ky tu thuoc ca S1, S2 (Không ke ky tu trong)" << endl;
		cout << "6.Tim tap ky tu va so lan xuat hien moi ky tu thuoc S1 nhung khong thuoc S2 (Không ke ky tu trong)" << endl;
		cout << "7.ma hoa x bang ky thuat chan le" << endl;
		cout << "8.giai ma x bang ky thuat chan le" << endl;
		cout << "9.tim tap tu va so lan xuat hien moi tu trong s1 hoac s2 " << endl;
		cout << "10.tim tap tu va so lan xuat hien moi tu trong s1 va s2" << endl;
		cout << "11.tim tap tu va so lan xuat hien moi tu trong s1 nhung khong xh trong s2" << endl;
		cout << "nhap bai: "; cin >> bai;
		switch (bai){
		case 1:
		{
				  char a[20], b[20], c[20];
				  cout << "nhap xau a: ";
				  fflush(stdin);
				  cin >> a;
				  cout << "nhap xau b: ";
				  fflush(stdin);
				  cin >> b;
				  strcat(a, b);
				  int m = 0;
				  for (int i = 0; i <= strlen(a); i++){
					  if (search(a[i], c) == 0){
						  c[m] = a[i];
						  m++;
					  }
				  }
				  for (int i = 0; i <= m - 1; i++) cout << c[i];
				  break;
		}
		case 2:
		{
				  char a[20], b[20], c[20];
				  cout << "nhap xau a: ";
				  fflush(stdin);
				  cin >> a;
				  cout << "nhap xau b: ";
				  fflush(stdin);
				  cin >> b;
				  int m = 0;
				  for (int i = 0; i <= strlen(a) - 1; i++){
					  if (search(a[i], b) == 1 && search(a[i], c) == 0){
						  c[m] = a[i];
						  m++;
					  }
				  }
				  for (int i = 0; i <= m - 1; i++) cout << c[i];
				  break;
		}
		case 3:
		{
				  char a[20], b[20], c[20];
				  cout << "nhap xau a: ";
				  fflush(stdin);
				  cin >> a;
				  cout << "nhap xau b: ";
				  fflush(stdin);
				  cin >> b;
				  int m = 0;
				  for (int i = 0; i <= strlen(a) - 1; i++){
					  if (search(a[i], b) == 0 && search(a[i],c)==0){
						  c[m] = a[i];
						  m++;
					  }
				  }
				  for (int i = 0; i <= m - 1; i++) cout << c[i];
				  break;
		}
		case 4:
		{
				  word x[20];
				  char a[20], b[20], c[20];
				  cout << "nhap xau a: ";
				  fflush(stdin);
				  cin >> a;
				  cout << "nhap xau b: ";
				  fflush(stdin);
				  cin >> b;
				  strcat(a, b);
				  int m = 0;
				  for (int i = 0; i <= strlen(a) - 1; i++){
					  if (search(a[i], c) == 0){
						  c[m] = a[i];
						  x[m].kitu = a[i];
						  x[m].solan = 1;
						  m++;
					  }
					  else {
						  for (int j = 0; j <= m - 1; j++){
							  if (x[j].kitu == a[i]) x[j].solan++;
						  }
					  }
				  }
				  for (int i = 0; i <= m - 1; i++) cout << "ki tu " << x[i].kitu << " xuat hien " << x[i].solan << " lan" << endl;
				  break;
		}
		}
		cout<<endl;
		cout<<"nhap 0 de dung lai, 1 de tiep tuc";
		cin>>dung;
	}while(dung==1);
}

ví dụ mình chạy bài 4. chạy xong thì mình chạy lại 1 lẫn nữa thì kết quả sai. có thể là do bộ nhớ các xâu của lần test trước chưa xóa nên bị lỗi. Mình có đọc về hàm fflush(stdin) và đưa vào bài toán nhưng mà không đúng mong bạn sửa lại giùm mình.

Nguyễn Minh Dũng viết 18:22 ngày 30/09/2018

@nguyenhongnhu trước hết bạn xem cái thiết kế chương trình của mình trước. Sau đó bạn xem chuyển đổi sang tương tự để sau này mình có thể sửa lỗi dễ hơn.

Không nên viết mọi code vào trong hàm main đâu. Rất khó quản lý và sửa lỗi. Bài này bạn phải làm 11 bài nhỏ đúng không? Vậy nên cố gắng để code trong các hàm bên ngoài thì hơn.

Sau khi sửa xong thì gửi lại code, Đạt sẽ hướng dẫn tiếp cho cách code sao cho tránh lỗi.

Quảng cáo tí: Đạt đi làm 4 năm rồi, đã code được 11 năm

Chỉnh Sửa viết 18:25 ngày 30/09/2018

à nhưng mà trước hết cho e (hehe) hỏi là cái code của a thì nó không dừng lại để xem kết quả. e đa thêm system(“pause”) nhưng vẫn không được

Chỉnh Sửa viết 18:25 ngày 30/09/2018

được rồi a ạ.đợi e chỉnh lại cái code của e rồi e gửi lên cho a xem

Chỉnh Sửa viết 18:22 ngày 30/09/2018

nãy giờ e tìm cái định nghĩa lệnh getchar() mà chưa thấy a giải thích cho e được không?

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

getchar() để nhận vào một ký tự thôi em.

Em có thể xem nhanh ở đây, video anh hướng dẫn getchar

Source Code #include <stdio.h> int main() { char c; char ten[20]; printf("Nhap ten, nhan ENTER de ket thuc\n"); int i = 0; do { //c = getchar(); scanf("%c", &c); ten[i] = c; i++; } while (c != '!'); ten[i] = 0; printf("xin chao %s\n", ten); return 0; } Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới…

Phân biệt getchar và getch

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
Chỉnh Sửa viết 18:26 ngày 30/09/2018

e bỏ lệnh getchar() thì chương trình vẫn chạ bình thường a ạ

Chỉnh Sửa viết 18:23 ngày 30/09/2018

à nó giúp dừng màn hình lúc chạy file exe đúng không a.

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

Đúng rồi đấy em. Em sửa code theo cấu trúc của anh sẽ dễ đọc và dễ sửa lỗi hơn đấy.

Chỉnh Sửa viết 18:21 ngày 30/09/2018

chỗ bài 2 sao lại phải đổi thành gets chứ không phải cin hả anh. và còn phaie đe fflush(stdin); mới chạy được

Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

đừng dùng cin để nhập chuỗi, dùng gets thôi.

cin để nhập số

Chỉnh Sửa viết 18:24 ngày 30/09/2018

bài 2 nếu dùng cin thì không hiện kết quả, còn như của a thì không bị lỗi. thế sao bài 1 và 3, 4 dùng cin vẫn được hả a

Chỉnh Sửa viết 18:19 ngày 30/09/2018
#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
using namespace std;
typedef struct{
	char kitu;
	int solan;
}word;
int search(char s, char *a){
	int t = strlen(a) - 1;
	for (int i = 0; i <= t; i++){
		if (s == a[i]) return 1;
	}
	return 0;
}
int menu(){
		int bai;
		system("cls");
		cout << "o.dung lai"<<endl;
		cout << "1.Tim X = {x thuoc S1 hoac x thuoc S2}" << endl;
		cout << "2.Tim X = {x thuoc S1 va x thuoc S2}" << endl;
		cout << "3.Tim X = {x thuoc S1 va x khong thuoc S2}" << endl;
		cout << "4.Tim tap ky tu va so lan xuat hien moi ky tu trong ca S1, S2 (Không ke ky tu trong)" << endl;
		cout << "5.Tim tap ky tu va so lan xuat hien moi ky tu thuoc ca S1, S2 (Không ke ky tu trong)" << endl;
		cout << "6.Tim tap ky tu va so lan xuat hien moi ky tu thuoc S1 nhung khong thuoc S2 (Không ke ky tu trong)" << endl;
		cout << "7.ma hoa x bang ky thuat chan le" << endl;
		cout << "8.giai ma x bang ky thuat chan le" << endl;
		cout << "9.tim tap tu va so lan xuat hien moi tu trong s1 hoac s2 " << endl;
		cout << "10.tim tap tu va so lan xuat hien moi tu trong s1 va s2" << endl;
		cout << "11.tim tap tu va so lan xuat hien moi tu trong s1 nhung khong xh trong s2" << endl;
		cout << "nhap bai: "; cin >> bai;
		return bai;
}
void tim_x_1()
{
    char a[20], b[20], c[20];
	cout << "nhap xau a: ";
	cin >> a;
	cout << "nhap xau b: ";
	cin >> b;
	strcat(a, b);
	int m = 0;
	for (int i = 0; i <= strlen(a); i++){
		if (search(a[i], c) == 0){
			c[m] = a[i];
			m++;
		}
	}
	for (int i = 0; i <= m - 1; i++) cout << c[i];
	cout<<endl;
	system("pause");
}

void tim_x_2()
{
    char a[20], b[20], c[20];
	cout << "nhap xau a: ";
    cin >> a;
    cout << "nhap xau b: ";
    cin >> b;
    int m = 0;
    for (int i = 0; i <= strlen(a) - 1; i++){
  	    if (search(a[i], b) == 1 && search(a[i], c) == 0){
	 	    c[m] = a[i];
		    m++;
	    }
    }
    for (int i = 0; i <= m - 1; i++) cout << c[i];
    cout<<endl;
        system("pause");
}

void tim_x_3()
{
    char a[20], b[20], c[20];
	cout << "nhap xau a: ";
	cin >> a;
	cout << "nhap xau b: ";
	cin >> b;
	int m = 0;
	for (int i = 0; i <= strlen(a) - 1; i++){
		if (search(a[i], b) == 0 && search(a[i],c)==0){
			c[m] = a[i];
			m++;
		}
	}
	for (int i = 0; i <= m - 1; i++) cout << c[i];
	cout<<endl;
    system("pause");
}

void tim_tap_ky_tu_4()
{
	word x[20];
	char a[20], b[20], c[20];
	cout << "nhap xau a: ";
	cin >> a;
	cout << "nhap xau b: ";
	cin >> b;
	strcat(a, b);
	int m = 0;
	for (int i = 0; i <= strlen(a) - 1; i++){
		if (search(a[i], c) == 0){
			c[m] = a[i];
			x[m].kitu = a[i];
			x[m].solan = 1;
			m++;
		}
		else {
			for (int j = 0; j <= m - 1; j++){
				if (x[j].kitu == a[i]) x[j].solan++;
			}
		}
	}
	for (int i = 0; i <= m - 1; i++) cout << "ki tu " << x[i].kitu << " xuat hien " << x[i].solan << " lan" << endl;
	cout<<endl;
	system("pause");
}
int main()
{
    int tieptuc=1;
    do
    {
        switch(menu())
        {
        case 0:
            tieptuc = 0;
            break;
        case 1:
            tim_x_1();
            break;
        case 2:
            tim_x_2();
            break;
        case 3:
            tim_x_3();
            break;
        case 4:
            tim_tap_ky_tu_4();
            break;
        default:
            cout << "nhap loi\n";
            break;
        }
    }
    while(tieptuc);
}

em sửa lại chương trình và đã chạy đúng hết. a xem có chỗ nào chưa tốt thì a chỉ giúp e ạ.

Nguyễn Minh Dũng viết 18:24 ngày 30/09/2018

Anh thấy mình cần sửa các điểm sau

  • vòng lặp for
 for (int i = 0; i <= strlen(a) - 1; i++)

nên sửa thành

 for (int i = 0; i < strlen(a) ; i++)
  • nếu không cần thiết thì không nên viết 1 dòng như thế này
for (int i = 0; i <= m - 1; i++) cout << c[i];

mà nên viết

for (int i = 0; i <= m - 1; i++) 
    cout << c[i];
  • tên biến và kiểu truy cập nên thay đổi
int search(char s, char *a)

thành

int search(char c, const char *s)

const char *s là để tránh thay đổi giá trị của chuỗi nhập vào một cách vô tình

Thực tế khắc nghiệt viết 18:26 ngày 30/09/2018

Mỗi hàm 1 công việc! sau đó test : nhập vào sai thì sửa nhập, tính sai thì sửa tính, xuất sai thì sửa xuất, … như thế code dễ sửa mà lại ko rối!

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

Mỗi hàm 1 công việc

Chính xác rồi. Nếu mình có thể chia nhỏ cụ thể một công việc thì nên tạo hàm ra để xử lý công việc đó.

Bài liên quan
0