首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

scanf扫描集处置字符串转整数

2013-09-07 
scanf扫描集处理字符串转整数我写了个程序:想利用scanf扫描集把一个字符串中的数字取出来,转化成一个整数

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.

热点排行