scanf除了平时使用的类似于
scanf("%d", &a);
等用法,还有一些不常见的用法,但却很有用。例如可以输入带空格的字符串:
char buf[80] = {0};
scanf("%[^\n]", buf);
原理是使用了[...]和[^...]这个转换符,这是一种很少见的用法,但却很有用 。
例如
#include <stdio.h>
main()
{
char string[100] = {0};
scanf("%[1234567890]", string);
printf("%s", string); getchar();
}
如果输入123qwe,则会输出123.如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果不属于就结束提取。
再例如
#include <stdio.h>
main()
{
char string[100] = {0};
scanf("%[^1234567890]", string);
printf("%s", string);
getchar();
}
如果输入123qwe,输出却为空;如果输入qwe123,则输出qwe。不难发现它的作用是:如果输入的字符属于方括号内字符串中某个字符,那么就结束提取;如果不属于就提取该字符。
因此,使用
scanf("%[^\n]", buf);
这样,在遇到回车(\n)前,所有字符都会被提取记录,当然就包括了空格。
使用注意,在测试时发现,如果[]中的字符串前后有空格的话结果将不准确,使用时不要忘了。