c语言中sscanf函数用法详解(c语言sscanf高级用法)
c语言中关于sscanf函数的运用及%n的用法
代码如下:
#includestdio.h
#includestring.h
int main (){
? char s[200];
? int n,wei;
? memset(s,0,sizeof(s));
? while(gets(s)){
? ? ? int cnt=0,sum=0,num;
? ? ? char *p=s;
? ? ? while(sscanf(p,"%d%n",n,wei)==1){
? ? ? ? ? sum+=n;cnt++;wei++;?
? ? ? ? ? if(p) p+=wei;
? ? ? }
? ? ? printf("%d %d\n",cnt,sum);
? ? ? memset(s,0,sizeof(s));
? }
? return 0;
}
扩展资料
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
其控制串由三类字符构成:
1、格式化说明符;
2、空白符;
3、非空白符;
用空白符结尾时,scanf会跳过空白符去读下一个字符,所以必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果用scanf("%d ",a)也会出现同样的问题。
C语言中的Scanf的用法
scanf 函数最主要的用法是:
scanf("输入控制符", 输入参数);
函数原型:int?scanf(const?char?*?restrict?format,...);
函数 scanf() 是从标准输入流stdin (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
扩展资料:
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
发展:
使用scanf函数进行输入,必须指定输入的数据的类型和格式,不仅繁琐复杂,而且很容易出错。C++保留scanf只是为了和C兼容。
以便过去用C语言写的程序可以在C++的环境下运行。C++的编程人员都愿意使用cin进行输入,很少使用scanf。
但是scanf有一个明显的优点,速度比cin函数快。
参考资料:
百度百科-scanf (计算机语言函数)
c语言中的scanf 函数的用法
scanf 函数最主要的用法是:
scanf("输入控制符", 输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。
扩展资料:
使用scanf()函数需要注意的问题:
1.对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上""操作符。
2.可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
3.scanf函数中没有类似printf的精度控制。
如:scanf("%5.2f",a); 是非法的。不能企图用此语句输入小数为2位的实数。
4.scanf中要求给出变量地址,如给出变量名则会出错
如:scanf("%d",a);是非法的,应改为scanf("%d",a);才是合法的。
5.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
6.在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
参考资料:
百度百科-scanf()函数
百度百科-gets()函数