//依次输出字符串中的数字团,比如poq89ayu1u&129aa
//就输出89,129,一共2个数。
//萌妹纸诚心诚意求修改
int main()
{
char str[80],*pstr;
int i=0,flag=1,num=0;
pstr=str;
gets(str);
while(flag==1)
{
for(i=0;(str+i)!='\0';i++)
{
if('0'<=*(str+i)&&*(str+i)<='9')
num=num+(*(str+i)-48);
}
flag=0;
while(flag==0)
{
printf("%d,",num);
flag=1;
}
}
getch();
}
内存溢出,可能数组超界,写到不应该的内存位置
不知道你是什么环境做的,我在ubuntu 14.4.1下,没有段错误,但是死循环,和我最初的判断一致
死循环的问题在于:while(flag==1)后面缺少{}。因此不断的重复for。
基本上可以确定是 for 循环写的有问题:
(1)判断字符,应该是
for(i=0;'0'<=(str+i)&&*(str+i)<='9';i++)
(2) for 循环没有结束
应该判断 (str+i) 等于零时退出 for 循环
首先while()循环后面缺个大括号,其次0,9,应该加个单引号,如:‘0’,‘9’
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
int main()
{
char str[80] = {0};
gets(str);
char* pstr=str;
for(;*pstr != '\0'; ++pstr)
{
bool flag = false;
char ch = *pstr;
if(('0' <= ch) && ('9' >= ch))
{
flag = true;
printf("%c", ch);
}
if(flag)
{
ch = *(++pstr);
if(ch != '\0')
{
if(('0' <= ch) && ('9' >= ch))
{
printf("%c", ch);
}
else
printf(",");
}
}
}
getch();
}
访问了非法内存,建议在运行时单步调试一下。。