[C / C ] 检查与scanf的字符串有一些?

真当这篇文章权衡自己不知道它的标题应该如何写… “检查您输入的数字有一些” @@稍微有趣,因为它叫号,然后检查什么, 或 “检查的C数” – 也没有完全准备好了这篇文章的目的,. 最后决定把如上述通过scanf函数进入的目的,将立即知道有没有数字或.

该方案将执行下列要求你输入一个整数 (INT), 如果输入了错误的号码 (是否有任何字符串格式 “12DABC”, “ABC123”, 甚至一个实数 12.3) 他们发现你再次.

检查在C中数

#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