马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我的解题思路是:
- 把所有字符都存储到数组中
- 用if语句判断出数字开始处
- 把数字与数字之后的数字重新存储到一个新的数组
- 使用if语句对新数组判断,当遇到字母时直接结束程序
目前遇到的问题:数组读取与存储好像出了点问题
javascript:;
javascript:;
代码如下:#include<stdio.h>
int main ()
{
int a = 0 , i = 0 , o = 0 , k = 0;
char b[127] , c[127];
printf("请打印一串字符:\n");
while (( b[a] = getchar() ) != '\n') //存储到数组中
{
a = a + 1;
}
while (i <= a) //把数字与之后所有字母存储到另一个数组
{
if (b[i] >= 48 && b[i] <= 57)
{
while (i <= a)
{
c[o] = b[i];
o = o + 1;
}
}
i++;
}
while (k <= o) //开始打印数字
{
if( c[k] >= 48 && c[k] <= 57) //打印出前面数字
{
putchar( c[o] );
}
else {
break; //其他字符则打断跳出
}
k = k + 1;
}
return 0;
}
问题分析:
根据代码逻辑,你的目标是将输入的字符数组中的数字提取出来,并打印出来。但是在代码中存在一些问题,导致程序无法正确执行。
问题1:数组越界访问
在存储字符到数组b时,没有对数组边界进行检查,可能导致数组越界访问。此外,数组c的大小应该至少为a的大小,以确保能够存储所有的数字字符。
问题2:循环条件错误
在第二个while循环中,判断条件应该是i < a,而不是i <= a。否则当i等于a时,循环会继续执行,导致数组越界访问。
问题3:打印字符错误
在打印数字字符时,应该使用c[k]而不是c[o]。因为o是用于记录新数组c的长度的变量,而k是用于遍历新数组c的变量。
问题4:跳出循环错误
在遇到非数字字符时,应该使用break语句跳出循环,而不是直接打断跳出。因此,应该将break放在if语句的外面。
解决方案:
下面是修复了上述问题的代码:
#include <stdio.h>
int main()
{
int a = 0, i = 0, o = 0, k = 0;
char b[127], c[127];
printf("请打印一串字符:\n");
while ((b[a] = getchar()) != '\n' && a < 127) // 存储到数组中并检查边界
{
a = a + 1;
}
while (i < a) // 把数字与之后所有字母存储到另一个数组
{
if (b[ i] >= 48 && b[ i] <= 57)
{
while (i < a)
{
c[o] = b[ i];
o = o + 1;
i = i + 1; // 添加对i的递增操作
}
}
else
{
break; // 其他字符则跳出循环
}
i = i + 1; // 添加对i的递增操作
}
while (k < o) // 开始打印数字
{
if (c[k] >= 48 && c[k] <= 57)
{
putchar(c[k]);
}
else
{
break; // 其他字符则跳出循环
}
k = k + 1;
}
return 0;
}
通过以上修改,你的代码应该能够正确地提取数字并打印出来。希望对你有帮助!如果还有其他问题,请随时提问。
|