scanf,fscanf,sscanf的区别----整理

转自原文 scanf,fscanf,sscanf的区别----整理

scanf 从控制台输入

fscanf 从文件输入
sscanf 从指定字符串输入

1、例:使用scanf函数输入数据。

#include<stdio.h>

int main()

{

int a,b,c;

printf("输入 a, b, c\n");

scanf("%d,%d,%d", &a, &b, &c);

printf("a = %d b = %d c = %d\n", a, b, c);

return 0;

}

2、int fscanf(文件指针,格式字符串,输入列表);

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

用 法: int fscanf(FILE *stream, char *format,[argument...]);

如:

FILE *fp;

char a[10];

int b;

double c;

fscanf(fp,"%s%d%lf",a,&b,&c)

返回值:整型,成功读入的参数的个数

3、大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。

1. 常见用法。
char str[512] = {0};
sscanf("123456 ", "%s", str);
printf("str=%s\n", str);

2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", str);
printf("str=%s\n", str);//str的值为1234

3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", str);//注意^后面有一空格
printf("str=%s\n", str);

4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", str);
printf("str=%s\n", str);

5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", str);
printf("str=%s\n", str);

源代码一如下:

    #include <stdio.h>
    #include <stdlib.h>  

    char *tokenstring = "12:34:56-7890";
    char a1[3], a2[3], a3[3];
    int i1, i2;  

    void main(void)
    {
       sscanf(tokenstring, "%2s:%2s:%2s-%2d%2d", a1, a2, a3, &i1, &i2);
       printf("%s\n%s\n%s\n%d\n%d\n\n", a1, a2, a3, i1, i2);
       getch();
    }   


源代码二如下:

    #include <stdio.h>
    #include <stdlib.h>  

    char *tokenstring = "12:34:56-7890";
    char a1[3], a2[3], a3[3],a;
    int i1, i2;  

    void main(void)
    {
       sscanf(tokenstring, "%2s%1s%2s%1s%2s%1s%2d%2d", a1, &a, a2, &a3, a3, &a, &i1, &i2);
       printf("%s\n%s\n%s\n%d\n%d\n\n", a1, a2, a3, i1, i2);
       getch();
    }   

结果同上

源代码三如下:

    #include <stdio.h>
    #include <stdlib.h>  

    char *tokenstring = "12:34:56-7890";
    char a1[3], a2[3], a3[3], a4[3], a5[3];
    int i1, i2;  

    void main(void)
    {
       char a;
       sscanf(tokenstring, "%2s%1s%2s%1s%2s%1s%2s%2s", a1, &a, a2, &a3, a3, &a, a4, a5);
       i1 =atoi(a4);
       i2 =atoi(a5);  

       printf("%s\n%s\n%s\n%d\n%d\n\n", a1, a2, a3, i1, i2);
       getch();
    }  

结果同上

方法四如下(以实例说明,原理相同):

    /* The following sample illustrates the use of brackets and the
       caret (^) with sscanf().
       Compile options needed: none
    */  

    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>  

    char *tokenstring = "first,25.5,second,15";
    int result, i;
    double fp;
    char o[10], f[10], s[10], t[10];  

    void main()
    {
       result = sscanf(tokenstring, "%[^‘,‘],%[^‘,‘],%[^‘,‘],%s", o, s, t, f);
       fp = atof(s);
       i = atoi(f);
       printf("%s\n %lf\n %s\n %d\n", o, fp, t, i);
    }  

原文地址:https://www.cnblogs.com/arxive/p/8401581.html

时间: 2024-08-29 17:27:35

scanf,fscanf,sscanf的区别----整理的相关文章

scanf()与gets()的区别

scanf()与gets()的区别 1.scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串. #include<stdio.h>int main(){ char s1[100],s2[100]; sacnf("%s%s",s1,s2);//scanf能同时接收多个字符串 gets(s1); gets(s2);//使用gets要分多次接收 return 0;} 2.scanf()可以不能接受带空格的字符串,而gets()能接受带空格的字符串. 3.sc

IHttpModule与IHttpHandler的区别整理

IHttpModule与IHttpHandler的区别整理1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些是在Handler之后运行的2.对请求的处理上:IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.3

编程题:函数gets()与scanf()的区别。

#include<stdio.h> void main() {char str1[20],str2[20]; gets(str1); scanf("%s",str2); printf("str1:%s\n",str1); printf("str2:%s\n",str2); } 编程题:函数gets()与scanf()的区别.,布布扣,bubuko.com

ref与out之间的区别整理 摘自与望楼http://blog.csdn.net/xiaoning8201/article/details/6893154

ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref传进去的参数必须在调用前初始化,out不必,即: int i; SomeMethod( ref i );//语法错误 SomeMethod( out i );//通过 2.ref传进去的参数在函数内部可以直接使用,而out不可: public void SomeMethod(ref int i)

httpModule HttpHandler 区别整理

httpModule HttpHandler 转自年轻的蜗牛 ASP.NET的HTTP请求处理方法 当 客户端向web服务器请求一个*.aspx的页面文件时,这个http请求也会被inetinfo.exe进程截获(www服务),它判断文件后缀之后, 把这个请求转交给ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道,将这个http请求发送给ASPNET_WP.EXE进程,当这个HTTP请求进入ASPNET_WP.EXE进程之 后,asp

scanf(),fscanf的详解

我们这里只讨论fscanf(或者scanf)的格式,因为这些细节在其他贴里并没有涉及,阅读此文,你可以少走一些弯路.只讲结果,深层原因并不分析. FILE *pFile:float x1; char name[20]; pFile = fopen('"example.txt","r"); 1.参数格式: 如fscanf(pFile,"%s%f", name, &x1)可以正确读到数值,那么当把此句中的%f替换为%lf则会出错.反之把x1的

getchar() getch() getche() gets() puts() scanf()的用法及区别

getchar() putchar(ch) scanf()   头文件stdio.h getch() getche()   头文件conio.h gets() puts()    头文件stdio.h getch()和getche()函数 都是从键盘上读入一个字符,但getch()函数不将读入的字符回显在显示屏幕上,而getche() 函数却将读入的字符回显到显示屏幕上. 而getchar()函数与上述两个函数的区别是:需等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上,但只

C中scanf/gets/fgets的区别

功能:同样是获取字符串. 区别: scanf 遇到空格/回车/Tab键认为输入结束, 但是空格/回车/Tab键仍会留在输入的缓冲区中.常见的是使用getchar(),处理scanf的后事:如果想要清除残余,可以使用fllush()清除缓存. gets 可以接收空格/回车/Tab键,回车结束输入,但是在Linux中gets是一个危险的函数,因为没有溢出检查:在window中gets是升级版的是安全的. 使用'\n'代替'\0',回车键不会留在输入缓冲区中. fgets  可以完美替代gets,只是

scanf 和cin 的区别

笔试的时候经常遇到突然string s;cin>>s; 有的时候编译会错误,不知道为什么. 今天在练习枚举类型的时候,也遇到这样一个问题. enum weekday{Monday,Tuesday} day; cin>>day;//报错 scanf("%d",&day);//正常 周纯洁的书上也都是用scanf;看样子scanf和printf不能随便丢弃啊.毕竟是标准输入输出流,没有缓存区 scanf是格式化输入,printf是格式化输出. cin是输入流