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