输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? 302tab5876将其中连续的数字作为一个整数,一次存放到一数组a中,例如,123放在a[0],456放在a[1]…统计共有多少个整数,并输出这些数 解决这个问题,上述程序出现了哪些错误,怎么解决
时间: 2024-04-22 07:27:49 浏览: 224
在上述程序中,出现了以下错误:
1. `gets` 函数存在安全性问题,建议使用 `fgets` 函数代替。
2. 在 `else` 分支中,应该将 `*(ptr + i) = '\0';` 修改为 `a[i] = '\0';`,以确保每个整数存放在 `a` 数组中的索引位置正确。
3. 在打印输出整数时,应该使用 `%d` 格式化整数,而不是 `%c` 格式化字符。
以下是修正后的代码:
```c
#include<stdio.h>
int main()
{
char str[1024];
char* ptr;
int a[100];
int i = 0, j;
printf("input string:\n");
fgets(str, sizeof(str), stdin);
ptr = &str[0];
while (*ptr != '\0')
{
if (*ptr >= '0' && *ptr <= '9')
{
a[i] = 0;
while (*ptr >= '0' && *ptr <= '9')
{
a[i] = a[i] * 10 + (*ptr - '0');
ptr++;
}
i++;
}
else
ptr++;
}
printf("there are %d numbers in this line, they are:\n", i);
for (j = 0; j < i; j++)
printf("%d ", a[j]);
return 0;
}
```
修正后的代码使用 `fgets` 函数读取输入字符串,并通过循环判断连续的数字字符来提取整数。整数存放在 `a` 数组中,并统计整数的个数。最后,使用 `%d` 格式化整数进行打印输出。
阅读全文