题解 | 复读机
复读机
https://www.nowcoder.com/practice/9d381551b6ab40c4b5c3c8d60fe4066e
#include <stdio.h>
#include <stdlib.h>
int main() {
// 读取第一行:整数
int a;
scanf("%d", &a);
getchar(); // 消耗换行符
// 读取第二行:长整数(使用long long确保存储1145141919810)
long long b;
scanf("%lld", &b);
getchar(); // 消耗换行符
// 读取第三行:浮点数
float c;
scanf("%f", &c);
getchar(); // 消耗换行符
// 读取第四行:字符
char d;
scanf("%c", &d);
getchar(); // 消耗换行符
// 读取第五行:字符串(动态分配内存处理任意长度)
int capacity = 10;
int len = 0;
char *str = (char*)malloc(capacity * sizeof(char));
if (str == NULL) {
printf("内存分配失败\n");
return 1;
}
char ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
// 动态扩展内存
if (len + 1 >= capacity) {
capacity *= 2;
char *temp = (char*)realloc(str, capacity);
if (temp == NULL) {
printf("内存扩展失败\n");
free(str);
return 1;
}
str = temp;
}
str[len++] = ch;
}
str[len] = '\0'; // 字符串终止符
// 按要求输出所有内容
printf("%d\n", a); // 整数原样输出
printf("%lld\n", b); // 长整数原样输出
printf("%.1f\n", c); // 浮点数保留一位小数
printf("%c\n", d); // 字符原样输出
printf("%s\n", str); // 字符串原样输出
free(str); // 释放动态内存
return 0;
}

查看19道真题和解析