Kiểm tra một ký tự c là một số hay không

Thực sự khi viết bài này mình đắn đo không biết nên viết tiêu đề của nó ra sao… “Kiểm tra số khi nhập vào có là số” @@ Hơi buồn cười vì đã gọi là số rồi thì kiểm tra làm gì, hay là “Kiểm tra số trong C” – cũng không chuẩn lắm với mục đích của bài này. Và cuối cùng thì quyết định đặt như trên với mục đích là khi nhập vào bằng scanf thì sẽ biết ngay đó có phải là số hay không.

Chương trình dưới đây sẽ thực hiện việc yêu cầu bạn nhập vào một số nguyên (int), nếu bạn nhập không đúng là số (dù là bất cứ chuỗi nào dạng “12dabc”, “abc123”, thậm chí là số thực 12.3) thì đều bắt bạn nhập lại.

Kiểm tra một ký tự c là một số hay không

#include <stdio.h> #include <stdlib.h> int clean_stdin() { while (getchar() != 'n') { } return 1; } int main(void) { int input; char c; do { printf("Enter an integer: "); } while (((scanf("%d%c", &input, &c) != 2 || c != 'n') && clean_stdin())); printf("done, number is %d", input); return 0; }

Mình giải thích một chút:

scanf(“%d%c”, &input, &c) Lệnh này sẽ cho phép chúng ta nhập vào một số nguyên và một ký tự nào đó ngay sau số nguyên này và nó sẽ trả về giá trị là một số nguyên – số lượng biến mà nó nhận (quét) được theo đúng định dạng trong chuỗi định dạng.

– Nếu bạn nhập vào abc thì hàm này sẽ trả về giá trị là 0 vì nó không thể đọc được một giá trị phù hợp nào.


– Nếu bạn nhập vào 123 và nhấn Enter thì giá trị trả về là 2 đó là 2 giá trị được chấp nhận theo định dạng, 123 cho %d và Enter cho %c.
– Nếu bạn nhập vào 123abc và nhấn Enter thì giá trị trả về là 2 đó là 2 giá trị được chấp nhận theo định dạng, 123 cho %d và ký tự a cho %c.

scanf(“%d%c”, &input, &c) != 2 || c != ‘n’
Nó đảm bảo rằng số lượng dữ liệu mà scanf quét được không phải là 2 hoặc ký tự nhận được không phải là enter. Đặt điều kiện này trong while để máy có thể thực hiện đúng là nếu bạn nhập không phải số và ngay sau đó enter thì sẽ lặp lại.

(scanf(“%d%c”, &input, &c) != 2 || c != ‘n’) && clean_stdin()
Hàm clean_stdin() là hàm luôn trả về giá trị 1 (tức là luôn đúng) nó thự hiện việc xóa bộ đệm (stdin) bằng cách đọc hết toàn bộ ký tự sót lại trong bộ đệm (những ký tự mà scanf không thể đọc được với định dạng nhập của nó) cho đến khi đọc đến ký tự enter. Việc đưa nó vào trong điều kiện vòng lặp while nhằm quét sạch bộ đệm mỗi khi bạn nhập sai để phục vụ cho lần nhập lại tiếp theo.

Bài viết có tham khảo các bình luận tại stackoverflow.com

mình đang tìm 1 hàm kiểm tra xem kí tự có phải là số tự nhiên hay không trong c++

có ai biết không ?

Bạn mới chuyển sang học về C/C++ à… Bên Pascan có khái niệm mã Ascii của 1 kí tự không bạn…

ý mình là có cách nào để kiểm tra kí tự có phải là 1 số tự nhiên ko ?

Viết luôn cái hàm cho nhanh

bool Check_STN(char s) { if (s >= '0' && s <= '9') return true; return false; }

1 Like

return s >= ‘0’ && s <= ‘9’

luôn, khỏi cần if làm gì.

3 Likes

Ừ. Vậy hay hơn. Tks bác chỉ bảo

1 Like

Home Categories FAQ/Guidelines Terms of Service Privacy Policy

#include<stdio.h>

#include<conio.h>

#include<string.h>

using namespace std;

int KiemTraKyTuSo(char *s)

{

int co=0;

for(int i=0;i<strlen(s);i++)

  {

  for(int j=48;j<=57;j++)

  {

  if(s[i]==j) co=1;

  }

  }

return co;  

}

int main()

{

char s[1000];

printf("vui long nhap chuoi: ");

gets(s);

puts(s);

fflush(stdin);

if(KiemTraKyTuSo(s)==1) printf(" Chuoi chua ky tu so");

else printf("Chuoi khong ky tu so");

return 0;   

}

Bài toán:

Hãy nhập vào một sốbất kỳ và xác định xem số đó có phải số nguyên hay không?

Video tham khảo:

Code tham khảo:

Phân tích: Số nguyên là số không có phần thập phân hay nói cách khác phần thập phân của nó bằng không. Từ đó suy ra nếu một số nào đó mà phần nguyên của nó bằng chính nó thì số đó là số nguyên. Trong lập trình để lấy phần nguyên của một số ta chỉ cần ép kiểu của số đó sang kiểu dữ liệu int.

#include<stdio.h> main(){ ///Hãy nhập vào một số N bất kỳ và kiểm tra xem N ///có phải là số nguyên hay không? ///Số nguyên là số có phần thực = 0, vậy suy ra ///nếu N-(int)N == 0 => N là số nguyên. float N; printf("\nMoi ban nhap mot so bat ky: "); scanf("%f",&N); if(N==(int)N){ printf("\n%g la so nguyen",N); }else{ printf("\n%g khong phai la so nguyen",N); } return 0; }