1.基于字符的输入函数
1.1 getchar()
语法:int getchar(void);
#include <stdio.h>
int main() {
int c;
printf("请输入字符,按Ctrl+D结束: ");
// 逐个读取字符直到文件结束
while ((c = getchar()) != EOF) {
printf("读取到字符: '%c' (ASCII: %d)\n", c, c);
}
return 0;
}
1.2 getc() 和 fgetc()
语法:int getc(FILE *stream)和 int fgetc(FILE *stream);
#include <stdio.h>
int main() {
FILE *file = fopen("test.txt", "r");
int c;
printf("从文件读取: ");
while ((c = fgetc(file)) != EOF) {
putchar(c);
}
fclose(file);
printf("\n从键盘读取: ");
c = getc(stdin); // 等同于 getchar()
printf("你输入了: %c\n", c);
return 0;
}
2. 基于行的输入函数
2.1 fgets()
语法:char *fgets(char *str, int n, FILE *stream);
#include <stdio.h>
#include <string.h>
int main() {
char line[100];
printf("请输入一行文本: ");
if (fgets(line, sizeof(line), stdin) != NULL) {
// 移除换行符
line[strcspn(line, "\n")] = '\0';
printf("你输入了: '%s'\n", line);
printf("字符串长度: %zu\n", strlen(line));
}
return 0;
}
2.2 gets()不推荐用
#include <stdio.h>
int main() {
char small_buffer[5];
printf("危险演示 - 输入超过4个字符: ");
gets(small_buffer); // 缓冲区溢出!
printf("缓冲区内容: %s\n", small_buffer);
return 0;
}
3. 格式化输入函数
3.1 scanf() 系列
语法: int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
#include <stdio.h>
int main() {
int age;
float height;
char name[50];
char city[30];
// scanf 从标准输入读取
printf("请输入 姓名 年龄 身高: ");
int result = scanf("%49s %d %f", name, &age, &height);
printf("成功读取了 %d 个值\n", result);
// fscanf 从文件读取
FILE *file = fopen("data.txt", "w+");
fprintf(file, "Beijing 25 175.5");
rewind(file);
fscanf(file, "%29s %d %f", city, &age, &height);
printf("城市: %s, 年龄: %d, 身高: %.1f\n", city, age, height);
fclose(file);
// sscanf 从字符串读取
char data[] = "上海 30 168.2";
sscanf(data, "%29s %d %f", city, &age, &height);
printf("从字符串解析: %s, %d, %.1f\n", city, age, height);
return 0;
}
4623

被折叠的 条评论
为什么被折叠?



