#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> #include<ctype.h> int main() { char a[100]; gets(a); int sum = 0; int count =0; int s = 0; int num[100]; int n = strlen(a); if (a[0] >= '0' && a[0] <= '9') { num[0] = a[0]; } for (int i = 1; i < n; i++) { if (a[i] >= '0' && a[i] <= '9') { if (a[i - 1] >= '0' && a[i - 1] <= '9') { count--; num[count] = num[count] * 10 + (a[i] - '0'); } else { num[count] = a[i]; } count++; } } for (int k = 0; k < count - 1; k++) { if (count == 0) { printf("NO"); } } int flag = 0; for (int k = 0; k < count - 1; k++) { if (flag == 0) { printf("%d", num[k]); flag = 1; } else printf(" %d", num[k]); sum = sum + num[k]; } printf("\n"); printf("%d", sum); return 0; }这个代码怎么修改
时间: 2024-01-10 09:01:55 浏览: 62
这段代码存在一些问题,比如使用了不安全的函数gets(),没有考虑输入字符串为空的情况等。以下是修改后的代码:
```
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char a[100];
fgets(a, 100, stdin); // 使用fgets()替换gets()
int sum = 0;
int count = 0;
int num[100];
int n = strlen(a);
if (isdigit(a[0])) { // 使用isdigit()判断是否为数字字符
num[0] = a[0] - '0'; // 将字符转换为数字
count++;
}
for (int i = 1; i < n; i++) {
if (isdigit(a[i])) {
if (isdigit(a[i - 1])) {
num[count - 1] = num[count - 1] * 10 + (a[i] - '0');
}
else {
num[count] = a[i] - '0';
count++;
}
}
}
if (count == 0) { // 判断输入字符串是否为空
printf("NO");
return 0;
}
int flag = 0;
for (int k = 0; k < count; k++) {
if (flag == 0) {
printf("%d", num[k]);
flag = 1;
}
else {
printf(" %d", num[k]);
}
sum = sum + num[k];
}
printf("\n");
printf("%d", sum);
return 0;
}
```
修改后的代码使用了安全的函数fgets(),使用isdigit()判断是否为数字字符,考虑了输入字符串为空的情况,并做了一些细节上的修改。
阅读全文