发布网友 发布时间:2023-11-28 12:35
共2个回答
热心网友 时间:2024-11-23 18:57
int _Cdecl sscanf (const char *buffer, const char *format, ...);
函数返回的是成功读入的参数个数。
你的本意是从(一行)一个字符串中读入几个数,但是字符串不是输入流,不会将已经读过的字符抹去,因此每次读其实都是从头开始,因此,如果从一个字符串中读出几个数,只能用一句,一次读完。不能对一个字符串反复地读。例如:
sscanf(str,"%d%d%s", &i,&i2, &s);
其实:
sscanf(str, "%d", &num) == 1表示成功读入一个数,要想读下一个数,必须从新输入字符串。
语句应该是(假定已知一行有5个数,int num[5],n):
if(n=sscanf(str, "%d%d%d%d%d", num,num+1,num+2,num+3,num+4) )
{ for(i=0;i<n;i++) sum += num[i];}
如果不确定每一行的数的个数,可以按照哪一行最多数的个数定义num,和sscanf语句。比如,每一行最多10个数。定义int num[10];sscanf的项数也增加到10.
下面是网络上的例子,有助于正确理解sscanf函数:
int main()执行输出 10 27 aaaaa
追答
你的程序离题目的要求相去甚远:
下面的程序是根据题意编写的:
#include "stdio.h"txt:
1 2 3 4 5
1 2
-1 1 0 15
78 9 10
2.txt
15
3
15
97
热心网友 时间:2024-11-23 18:58
当sscanf(str, "%d", &num) == 1为真时,读取到的num累加到sum后,又重新开始从str这个地址开始重复读你刚刚读出的数据了,所以会一直进行下去。