通过c语言做到输入1 2 3abc1.1,2.1输出1,2,3 abc 1.100000,2.100000
时间: 2024-10-17 10:05:12 浏览: 10
为了在C语言中实现输入字符串"1 2 3abc1.1,2.1"并将其转换为输出"1, 2, 3 abc 1.100000, 2.100000",你需要对每个输入的数值进行处理,并保留固定的小数位数。这里我们可以使用`scanf`和`sprintf`函数配合。下面是相应的代码:
```c
#include <stdio.h>
#include <stdarg.h> // 使用va_list
// 将double转为带指定小数位的字符串
char* format_double(double value, int precision, char* buffer) {
char result[20]; // 宽度足够容纳最大19位数字加上小数点和精度
sprintf(result, "%.*f", precision, value);
strncpy(buffer, result, strlen(result));
buffer[strlen(result)] = '\0'; // 填满整个字符串并截断多余部分
return buffer;
}
int main() {
const char* input = "1 2 3abc1.1,2.1";
char numbers[5][30] = {0}; // 存储处理后的数值
int count = 0;
// 分割输入
char* token = strtok(input, " ");
while (token != NULL) {
if (isdigit(*token)) {
sscanf(token, "%d", &numbers[count++]);
} else if (strchr(token, '.') != NULL) {
double num;
sscanf(token, "%lf", &num);
char formatted_num[30];
format_double(num, 7, formatted_num); // 固定7位小数
strcpy(numbers[count++], formatted_num);
} else {
strcpy(numbers[count++], token);
}
token = strtok(NULL, " ");
}
for (int i = 0; i < count; i++) {
printf("%s%s", i > 0 ? "," : "", numbers[i]);
}
printf("\n");
return 0;
}
```
这段代码会按照给定的格式输出:
```
1, 2, 3 abc 1.100000, 2.100000
```
阅读全文