d098
輸入說明 :
每組測資有一行,內含多個單字,每個單字之間會以空格作分隔(每一行的前後都有可能有空格,且分隔單字的空格可能不只一個)。
輸出說明 :
請求出所有僅含數字的單字,並且加總後輸出。這些數字的總和不會超過2的16次方。
這題我用sscanf來做
sscanf使用的時機就是題目給的行數不定,每一行的個數你也不知道
因為行數不固定,所以while(gets(s)),只要有讀到東西就繼續做,但是要結束了怎麼辦
所以當*p=='\0'時,程式結束,表示那一行第一個就是'\0'
用sscanf要注意的,你要把你那一行字串陣列的名稱,給一個字元指標,不然直接操做陣列名稱是不合法的,詳細怎麼用可以看這篇
對每一個讀進來的字串分析它是不是純數字
是的話把它轉成數字存到c陣列裡面
最後把c陣列裡面的數字全部加起來
#include<stdio.h>
#include<string.h>
int main()
{
char s[1000];
char *p;
while(gets(s))
{
p=s;
if(*p=='\0')
break;
int l;
int i,j=0;
int nflag,cflag=0,sum=0;
char a[10000];
int c[10000];
while(sscanf(p,"%s%n",&a,&l)==1&&strcmp(s,"\0")!=0)
{
p+=l;
nflag=1;
for(i=0;a[i];i++)
{
if(a[i]<'0'||a[i]>'9')
{
nflag=0;
break;
}
}
if(nflag)
{
cflag=1;
for(i=0;a[i];i++)
{
sum+=(a[i]-'0');
sum*=10;
}
sum/=10;
c[j]=sum;
j++;
sum=0;
}
}
j--;
if(cflag)
for(;j>=0;j--)
sum+=c[j];
printf("%d\n",sum);
}
return 0;
}