01/10/2018, 17:38

Kiểm tra người dùng có nhập đúng số hàm scanf trong C

Chào các anh chị, em muốn kiểm tra xem người dùng có nhập đúng integer thông qua hàm scanf trong C như dưới đây ạ:

int CheckInteger(){
	
	int number; char c;
	int check = 0;
	
		
	do{
		fflush(stdin);
		printf("Please enter an integer: 
");
		
	}while(scanf("%d%c", &number, &c) != 2 || c != '
');
	

	
	return number;
}

Hàm này sẽ hiện ra yêu cầu bảo người dùng nhập số Integer vào rồi kiểm tra, nếu đúng là integer thì sẽ trả lại số đó, còn nếu không đúng bắt nhập lại ạ

Em muốn cải tiến hàm này ở 2 điểm sau:

  1. Giờ muốn thông báo ra lỗi, ví dụ như nhập số không được nhỏ hơn 0 hay là lỗi khi người dùng nhập kí tự hay chữ vào thì thêm If ở đâu ạ.

  2. Là em muốn hàm này trở thành có tham số đầu vào để check tham số đó nhưng đang bí không biết nên cho tham số vào kiểu gì và check kiểu gì.

Mong các anh chị giúp em

Nguyễn Nam viết 19:39 ngày 01/10/2018

Hàm scanf dùng khi nhấn Enter, ngoài ra khi scanf muốn nhận giá trị integer mà người dùng lại nhập kí tự thì lỗi.
Để mà kiểm tra, thông báo lỗi cụ thể thì nhập vào 1 chuỗi, kiểm tra chuỗi này.
Còn 1 cách hay khác nữa. Khi người dùng nhập phím chỉ được nhập số, các kí tự khác không nhận.
Trong C có 2 hàm:
getc(stdin) trong stdio.h và getch() trong conio.h.
Còn tham số đầu vào dùng để làm gì?

Ga Mat Ong viết 19:52 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Nguyễn Nam viết 19:47 ngày 01/10/2018
#define TRUE 1
#define FALSE 0
#include <stdio.h>
bool isUnsignedInt(char* str){
	for (int i=0;str[i]!='\0';i++)
		if (!('0'<=str[i] && str[i]<='9'))
			return FALSE;
	return TRUE;
}
int toInt(char* str){
	for (int i=0;str[i]!='\0';i++)
		if ('0'<=str[i] && str[i]<='9')
			;/*convert char -> int [0,9]*/
}
void check_str(char* str){
	if (isUnsignedInt(str))
		printf("Print Int");
	else printf ("Print not something"); /*str is string, point floating number,...*/
}
int main(){
	char c;
	char str[512];
	int number=0;
	/*while((c=getc(stdin))!=10){
		if (48<=c && c<=57)
			number=number*10 + c-48;
	}*/
	/*
	scanf("%s", &str);
	check_str(str);
	*/
	printf("%i\n", number);
	return 0;
}
Bài liên quan
0