scanf的另一种用法

来源:互联网 发布:小米网络助手apk通用版 编辑:程序博客网 时间:2024/05/22 05:02

 

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)前,所有字符都会被提取记录,当然就包括了空格。

使用注意,在测试时发现,如果[]中的字符串前后有空格的话结果将不准确,使用时不要忘了。

原创粉丝点击