30/09/2018, 23:27

Hỏi đáp vền vấn đề dùng getch() và getchar() để dừng màn hình

Như tít thì mình thấy getch() không thuộc chuẩn nên không nên dùng.
Nhưng trong bài dưới đây mình dùng getch() thì màn hình đứng lại còn getchar() thì không.
Mn giúp mình giải đáp cái này đc không. Tks

#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;


void taoMang(int a[], int &n)
{
	cout << "Nhap so phan tu toi da: ";
	cin >> n;

	//tao mang ngau nhien
	srand(time(NULL));
	for (int i = 0; i < n; i++)
		a[i] = rand() % 99 + 0;
}


void xuatMang(int a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << "
";
}


void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
}


void interChangeSort(int a[], int n)
{
	//so sanh a[i] voi tat ca phan tu trong mang. roi doi vi tri a[i] vs a[j]

	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[i])
				swap(a[i], a[j]);
	}
}

//------------------------------------------***---------------------------------------------------
int main()
{
	int a[100];
	int n;
	taoMang(a, n);
	xuatMang(a, n);
	interChangeSort(a, n);
	xuatMang(a, n);
	cout << "Push -ENTER- to quit.";
	getchar();
	return 0;
}
Mai Hữu viết 01:32 ngày 01/10/2018

Bạn có thể xài hàm system(“pause”) trong thư viện windows.h để đừng màn hình

Minh Thành viết 01:37 ngày 01/10/2018
  1. Bạn bị thiếu cin.ignore() ngay sau chỗ cin >> n trong hàm taoMang, do đó nó còn để lại kí tự ‘\n’ trong stdin, hàm getchar() nhận vào và lấy kí tự đó ra stdin nên trong trường hợp này bạn không dừng màn hình được, còn hàm getch() chờ mình nhập do nó nhận gia trị trực tiếp từ bàn phím không lấy trong stdin

  2. Hàm swap của bạn trong trường hợp này là dùng tham chiếu : void swap(int &a, int &b)

  3. Vòng lặp nên là: for (int i = 0; i < n - 1; i++)

Sinner viết 01:38 ngày 01/10/2018

system(“pause”) mình thấy mn khuyên không nên dùng vì nó không portable

Sinner viết 01:33 ngày 01/10/2018

Bạn giải thích rất chi tiết. cảm ơn bạn

Bài liên quan
0