Chào mọi người, em đang làm một chương trình về bignum, em có đặt vòng lặp do whlie để nó chạy nhiều lần. Tuy nhiên có vẻ nó đã có vấn đề.
Ở vòng thứ 2 trở đi, bignum a mặc định là 0. Nếu vứt dòng cin >> n thì nó chạy bình thường.
Mọi người giúp em làm sao giữ lại cin >>n mà nó vẫn cho nhập a với ạ.

Mã:
// Bai tap BigNum.cpp : Defines the entry point for the console application.


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

//Khai báo hằng
#define MAXDIGITS 100 //Độ dài của số
#define PLUS 1 //số dương
#define MINUS -1 // số âm



//Khai báo cấu trúc
typedef struct {
	char digits[MAXDIGITS]; //bignum
	int signbit; //dấu của bignum
	int lastdigit; //số chữ số
}bignum;


//Khai báo hàm
void scan_bignum(bignum &n); //Nhập số nguyên lớn		
void print_bignum(bignum n);//in số
int kiemtra(char s[]); //kiểm tra chuỗi có phải số nguyên lớn không
int compare_bignum(bignum a, bignum b);


int main()
{
do {
                int n;
		bignum a, b, c;
		cout << "Nhap a: ";
		scan_bignum(a);
		print_bignum(a);
		cout << "
";
		cout << "Nhap n: ";
		cin >> n;
		cout << "
";
		cout << "Nhan phim ESC de thoat...
";
	} while (_getch() != 27);



    return 0;
}

void scan_bignum(bignum &n) //Nhập số nguyên lớn
{
	//B1: Nhập một chuỗi bất kỳ
	char temp[MAXDIGITS + 2];
	cin.getline(temp, MAXDIGITS + 2);

	//B2: Kiểm tra chuỗi có hợp lệ hay không
	//B2.1: Nếu không hợp lệ thì gán bignum n = 0
	if (!kiemtra(temp))
	{
		n.signbit = PLUS;
		n.lastdigit = 0;
		n.digits[0] = 0;
	}

	//B2.2: Nếu hợp lệ thì chuyển thành bignum
	else {
		int len = strlen(temp);
		if (temp[0] != '-') //Nếu là số dương
		{
			int len = strlen(temp);
			n.signbit = PLUS;
			n.lastdigit = len - 1;
			for (int i = 0; i <= n.lastdigit; i++)
				n.digits[i] = temp[len - 1 - i] - 48;
		}
		else {//số âm
			n.signbit = MINUS;
			n.lastdigit = len - 2;
			for (int i = 0; i <= n.lastdigit; i++)
				n.digits[i] = temp[len - 1 - i] - 48;
		}
	}


}
void print_bignum(bignum n)//in số
{
	if (n.signbit == MINUS) cout << "-"; //số âm
	for (int i = n.lastdigit; i >= 0; i--) //chạy ngược
		cout << (int)n.digits[i];	//in từng chữ số
}
int kiemtra(char s[]) //kiểm tra chuỗi có phải số nguyên lớn không
{
	int len = strlen(s);
	//ktra ký tự đầu
	if ((s[0] != '-' && !isdigit(s[0])) || (s[0] == '-' && len == 1))
		return 0;
	//ktra các ký tự tiếp theo
	for (int i = 1; i<len; i++)
		if (!isdigit(s[i])) return 0;
	//không phát hiện vi phạm
	return 1;
}