Nhập ký tự bị lỗi vòng lặp

c

(Luu Hoang Vu) #1

Chào các bạn daynhauhoc.com

  • Mình đã chặn nhập chữ cái rồi mà khi nhập chữ cái vẫn bị lặp nhập liên tục.
#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */
int enterSizeOfArray();
void enterArray(int *array, int size);
int sumOfArray(int *array, int size);

int enterSizeOfArray() {
    int size;
    char c;
    do {
        printf("Number of elements n = ");
        scanf("%d%c", &size, &c);
        fflush(stdin);
    } while (c != '\n' || size < 0);
    return size;
}

void enterArray(int *array, int size) {
    int i;
    for(i = 0; i < size; i++) {
        printf("Enter an integer: ");
        scanf("%d", &array[i]);
        fflush(stdin);
    }
}

int sumOfArray(int *array, int size) {
    int i;
    int sum = 0;
    for (i = 0; i < size; i++) {
        sum += array[i];
    }
    printf("Sum of decimal: %d ", sum);
}


int main(int argc, char** argv) {
    int size;
    int *array;
    int sum;
    char cont;
    array = (int *) malloc(sizeof(int));
    do {
        printf("Dynamic memory allocation\n");
        size = enterSizeOfArray();
        enterArray(array, size);
        sum = sumOfArray(array, size);
        printf("Press anykey to countinue or ESC to exit! ");
        scanf("%c", &cont);
        fflush(stdin);
    } while (cont != 27);
    getchar();
    getchar();
    return (EXIT_SUCCESS);
}

(Sherly1001) #2
  • Bạn muốn code của bạn khi nhập ESC là sẽ out.

  • Nhưng hàm scanf() của bạn lại không nhận được ký tự đó.

  • Để làm được vậy bạn phải sử dụng hàm getch() trong thư viện conio.h.

  • Tuy nhiên nếu làm theo cách trên thì bạn vẫn phải nhấn ESCEnter hai lần. Vì còn thừa 2 cài getchar(); ở dưới, bạn có thể bỏ nó đi.

  • Hoặc bạn có thể sửa lại code thành while (cont != 'x'); chẳng hạn. Vừa đơn giản lại không mất tính thẩm mỹ. :slight_smile:


Và đây là hàm main() của bạn: :point_down:

int main(int argc, char** argv) {
	int size;
	int *array;
	int sum;
	char cont;
	array = (int *) malloc(sizeof(int));
	do {
		printf("Dynamic memory allocation\n");
		size = enterSizeOfArray();
		enterArray(array, size);
		sum = sumOfArray(array, size);
		printf("Press anykey to countinue or ESC to exit! ");
//		scanf("%c", &cont);
		fflush(stdin);
		cont = getch();
	} while (cont != 27);
//	getchar();
//	getchar();
	return (EXIT_SUCCESS);
}

P/s: Nhớ include <conio.h> :slight_smile: chúc bạn code vui vẻ.


(Luu Hoang Vu) #3

Phòng máy trường ko sử dụng được thư viện conio.h được bạn !


(Sherly1001) #4

Thì bạn có thể dùng cách nhập phím x để thoát. :slight_smile:


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