scanf扫描集处理字符串转整数
我写了个程序:想利用scanf扫描集把一个字符串中的数字取出来,转化成一个整数输出。可是while循环那里怎么不读数呢?我刚接触scanf扫描集,没明白这里用法的问题出在哪里?求指导,谢谢!
#include<stdio.h>
#include<string.h>
int main()
{
char flag = 0, *ptr;
char str[80] = {'\0'};
long n;
ptr = str;
while (flag != '\n')
scanf("%[0-9]%[\n]", ptr + strlen(str), flag);
printf("%s\n", str);
sscanf("str", "%d", &n);
printf("%ld", n);
}
[解决办法]
sscanf("str", "%d", &n);
//改成
sscanf(str, "%ld", &n);
或者
n = atol(str);
[解决办法]
干嘛搞得那么复杂,下面是你要的效果吗?
char str[80] = {'\0'};
long n;
scanf("%[0-9] ", str);
printf("%s\n", str);
sscanf(str, "%d", &n);
printf("%ld", n);
[解决办法]
scanf("%[0-9]%[\n]", ptr + strlen(str), flag);
%[\n]还是会把所有连续的\n给丢到一个字符串里。但是参数里你丢进去一个char flag?
[解决办法]
#include <stdio.h>
char s[]="123 ab\t4\n5\n6";
char *p;
char c;
int n,k;
char *ch(char cc) {
static char s[3];
if ('\t'==cc)
sprintf(s,"\\t");
else if ('\n'==cc)
sprintf(s,"\\n");
else
sprintf(s,"%c",cc);
return s;
}
void main() {
p=s;
while (1) {
k=sscanf(p,"%c%n",&c,&n);
printf("k,c,n=%d,%s,%d\n",k,ch(c),n);
if (1==k) {
p+=n;
} else if (0==k) {
printf("skip char[%s]\n",ch(p[0]));
p++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,c,n=1,1,1
//k,c,n=1,2,1
//k,c,n=1,3,1
//k,c,n=1, ,1
//k,c,n=1,a,1
//k,c,n=1,b,1
//k,c,n=1,\t,1
//k,c,n=1,4,1
//k,c,n=1,\n,1
//k,c,n=1,5,1
//k,c,n=1,\n,1
//k,c,n=1,6,1
//k,c,n=-1,6,1
//End.