[C / C ] 检查与scanf的字符串有一些?
真当这篇文章权衡自己不知道它的标题应该如何写… “检查您输入的数字有一些” @@稍微有趣,因为它叫号,然后检查什么, 或 “检查的C数” – 也没有完全准备好了这篇文章的目的,. 最后决定把如上述通过scanf函数进入的目的,将立即知道有没有数字或.
该方案将执行下列要求你输入一个整数 (INT), 如果输入了错误的号码 (是否有任何字符串格式 “12DABC”, “ABC123”, 甚至一个实数 12.3) 他们发现你再次.
#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; }
解释自己一点:
scanf函数(“%ð%C”, &输入, &Ç)
这将使我们进入一个整数和一个字符紧跟这一整数,它返回一个整数值 – 它接收的变量数 (扫) 按照格式字符串格式.
– 如果输入 ABC 这个函数返回一个值 0 因为它不能由一个合适的值读做.
– 如果输入 123 按 进入 返回值是 2 就是说 2 允许值的格式, 123 输入%D和%C.
– 如果输入 123ABC 按 进入 返回值是 2 就是说 2 允许值的格式, 123 对%D和%c代表一个字符.
scanf函数(“%ð%C”, &输入, &Ç) != 2 || Ç !='N’
它保证了数据的量不是scanf的扫描 2 或字符收到的是不进. 把这个状态中的同时,对机器可适当地进行,如果你没有输入正确的号码,然后进入它将重复.
(scanf函数(“%ð%C”, &输入, &Ç) != 2 || Ç !='N') && clean_stdin()
颚 clean_stdin() 该函数总是返回一个值 1 (这始终是真实的) 它是删除缓存别墅 (标准输入) 通过阅读整个字符留在缓冲 (不能读取它的输入格式scanf的字符) 直到读取器输入的字符. 这些条件把它放在一个while循环,你的服务,下次再进入每一次擦拭缓存.
帖参考注释中 stackoverflow.com
Bài của bạn rất hay. Nhưng có một chổ mình vẫn không rỏ là tại sao lại có điều kiện scanf != 2. Mình thử bỏ nó đi chỉ có c != ‘\n’ thì nó vẫn chạy. Cám ơn vì sự trả lời. 🙂
Hàm scanf sẽ trả về 1 số tương ứng với số lượng biến được nhập vào, do đó mình nhập 2 số thì so sánh với 2
cảm ơn tác giả nhé ^^
您能详细说明clean_stdin函数操作吗() 是不是
它将清除输入缓存.