C语言从键盘分别输入通过空格分割的整型(int)、浮点型(double)、字符型(String)、 布尔型(boolean),根据读取的内容判断他们的类型并将他们解析为正确的对象,并都放到一一个数组中
时间: 2024-09-30 09:01:06 浏览: 54
在C语言中,由于其类型检查不如现代动态类型语言严格,你需要对用户输入进行逐个处理并根据输入的数据转换成对应的类型。这里提供一个基本的示例,展示如何完成这个任务:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
int int_type;
double double_type;
char string_type[100];
bool boolean_type;
} DataItem;
DataItem* parse_input(char input[], int count) {
DataItem *data = (DataItem*)malloc(count * sizeof(DataItem));
for (int i = 0; i < count && input[i]; i++) {
char type_char = input[i];
switch (type_char) {
case 'i': // 整数
sscanf(&input[i + 1], "%d", &data[i].int_type);
i += 2; // 跳过数字后面的空格
break;
case 'f': // 浮点数
sscanf(&input[i + 1], "%lf", &data[i].double_type);
i += 2;
break;
case 'c': // 字符串
fgets(data[i].string_type, 100, stdin); // 读入一行字符串
data[i].string_type[strlen(data[i].string_type) - 1] = '\0'; // 删除末尾换行符
i++;
break;
case 'b': // 布尔值
if (!strcmp(input[i + 1], "true")) {
data[i].boolean_type = true;
} else if (!strcmp(input[i + 1], "false")) {
data[i].boolean_type = false;
} else {
printf("Invalid boolean value detected.\n");
exit(1);
}
i += 2;
break;
default:
printf("Unknown type character '%c'.\n", type_char);
exit(1);
}
}
return data;
}
int main() {
char input[100];
printf("Enter integers, floats, strings, and booleans separated by spaces: ");
fgets(input, sizeof(input), stdin);
// 分割输入
char* tokens = strtok(input, " ");
int count = 0;
while (tokens != NULL) {
count++;
tokens = strtok(NULL, " ");
}
DataItem* result = parse_input(input, count);
// ... 现在你可以遍历result数组并使用数据
free(result); // 不要忘记释放内存
return 0;
}
```
在这个示例中,`parse_input`函数接收用户输入的字符串和计数,然后逐个读取每个元素并根据字符类型将其赋值给相应的结构体成员。注意这只是一个基础版本,实际应用中可能需要更复杂的错误处理和边界检查。
阅读全文