当前位置: 首页 > news >正文

每日一个C语言知识:C 输入 输出

C 语言输入 & 输出

C语言本身不提供输入输出语句,而是通过标准库函数来实现。这些函数主要在 <stdio.h> 头文件中声明。

基本的输出函数

1. printf() - 格式化输出

这是最常用的输出函数,可以将数据按指定格式输出到标准输出设备(通常是屏幕)。

语法:

int printf(const char *format, ...);

示例:

#include <stdio.h>int main() {int age = 25;float salary = 7500.50;char name[] = "张三";// 基本输出printf("Hello, World!\n");// 格式化输出printf("姓名: %s\n", name);        // 字符串printf("年龄: %d\n", age);         // 整数printf("工资: %.2f\n", salary);    // 浮点数,保留2位小数printf("字符: %c\n", 'A');         // 字符// 多个变量输出printf("%s今年%d岁,工资%.2f元\n", name, age, salary);return 0;
}
2. putchar() - 输出单个字符
#include <stdio.h>int main() {putchar('A');       // 输出字符 Aputchar('\n');      // 输出换行putchar('B');putchar('\n');return 0;
}
3. puts() - 输出字符串

自动在字符串末尾添加换行符。

#include <stdio.h>int main() {char str[] = "Hello, C Language!";puts(str);          // 输出字符串并换行puts("这是另一行"); // 直接输出字符串常量return 0;
}

基本的输入函数

1. scanf() - 格式化输入

从标准输入设备(通常是键盘)读取格式化数据。

语法:

int scanf(const char *format, ...);

示例:

#include <stdio.h>int main() {int age;float height;char name[50];printf("请输入您的姓名: ");scanf("%s", name);      // 读取字符串(不包含空格)printf("请输入年龄: ");scanf("%d", &age);      // 注意:需要取地址符 &printf("请输入身高(米): ");scanf("%f", &height);printf("\n--- 您的信息 ---\n");printf("姓名: %s\n", name);printf("年龄: %d\n", age);printf("身高: %.2f米\n", height);return 0;
}

重要提醒: 使用 scanf() 读取字符串时,遇到空格会停止。要读取包含空格的字符串,可以使用 fgets()

2. getchar() - 读取单个字符
#include <stdio.h>int main() {char ch;printf("请输入一个字符: ");ch = getchar();     // 读取单个字符printf("您输入的字符是: ");putchar(ch);putchar('\n');return 0;
}
3. gets()fgets() - 读取字符串

注意: gets() 函数不安全,已从C11标准中移除,因为它不检查缓冲区大小。

推荐使用 fgets()

#include <stdio.h>int main() {char name[50];printf("请输入您的全名: ");fgets(name, sizeof(name), stdin);   // 安全地读取字符串printf("您好, %s", name);  // fgets会保留换行符return 0;
}

格式化说明符详解

格式符用途示例
%d有符号十进制整数printf("%d", 100);
%f浮点数printf("%.2f", 3.14159);
%c字符printf("%c", 'A');
%s字符串printf("%s", "hello");
%u无符号十进制整数printf("%u", 255);
%x十六进制整数(小写)printf("%x", 255);
%X十六进制整数(大写)printf("%X", 255);
%o八进制整数printf("%o", 64);
%p指针地址printf("%p", &var);
%%输出%字符本身printf("%%");

格式化修饰符:

  • %.2f - 保留2位小数
  • %5d - 至少占5个字符宽度,右对齐
  • %-5d - 至少占5个字符宽度,左对齐
  • %05d - 至少占5个字符宽度,前面补0

完整的交互式示例

#include <stdio.h>int main() {char name[50];int age;float gpa;char grade;// 获取用户输入printf("=== 学生信息录入 ===\n");printf("请输入姓名: ");fgets(name, sizeof(name), stdin);// 移除fgets读取的换行符for(int i = 0; name[i] != '\0'; i++) {if(name[i] == '\n') {name[i] = '\0';break;}}printf("请输入年龄: ");scanf("%d", &age);printf("请输入平均成绩: ");scanf("%f", &gpa);printf("请输入等级 (A/B/C/D/F): ");scanf(" %c", &grade);  // 注意%c前面的空格,用于跳过之前的换行符// 格式化输出printf("\n=== 学生信息汇总 ===\n");printf("姓名: %s\n", name);printf("年龄: %d岁\n", age);printf("平均成绩: %.2f\n", gpa);printf("等级: %c\n", grade);// 表格形式输出printf("\n%-10s %-6s %-8s %s\n", "姓名", "年龄", "成绩", "等级");printf("%-10s %-6d %-8.2f %c\n", name, age, gpa, grade);return 0;
}

文件输入输出

C语言也提供了文件操作函数,语法与标准I/O类似。

文件写入示例:
#include <stdio.h>int main() {FILE *file;char text[] = "这是写入文件的内容\nHello, File I/O!";// 打开文件用于写入file = fopen("example.txt", "w");if(file == NULL) {printf("文件打开失败!\n");return 1;}// 写入文件fprintf(file, "%s\n", text);fputs("这是另一行文本\n", file);// 关闭文件fclose(file);printf("文件写入成功!\n");return 0;
}
文件读取示例:
#include <stdio.h>int main() {FILE *file;char buffer[100];// 打开文件用于读取file = fopen("example.txt", "r");if(file == NULL) {printf("文件打开失败!\n");return 1;}printf("文件内容:\n");printf("==========\n");// 逐行读取文件内容while(fgets(buffer, sizeof(buffer), file) != NULL) {printf("%s", buffer);}// 关闭文件fclose(file);return 0;
}

错误处理和输入验证

良好的输入输出应该包含错误处理:

#include <stdio.h>int main() {int number;char ch;printf("请输入一个整数: ");// 检查scanf是否成功读取if(scanf("%d", &number) != 1) {printf("输入错误!请输入有效的整数。\n");// 清空输入缓冲区while((ch = getchar()) != '\n' && ch != EOF);return 1;}printf("您输入的数是: %d\n", number);// 清空输入缓冲区中的剩余字符while((ch = getchar()) != '\n' && ch != EOF);printf("请输入一个字符: ");scanf("%c", &ch);printf("您输入的字符是: %c\n", ch);return 0;
}

高级格式化技巧

#include <stdio.h>int main() {int num1 = 123, num2 = 4567;float pi = 3.1415926535;printf("=== 格式化输出示例 ===\n");// 宽度和对齐printf("右对齐: |%5d|\n", num1);     // |  123|printf("左对齐: |%-5d|\n", num1);    // |123  |printf("前导零: |%05d|\n", num1);    // |00123|// 浮点数精度printf("默认: %f\n", pi);            // 3.141593printf("2位小数: %.2f\n", pi);       // 3.14printf("4位小数: %.4f\n", pi);       // 3.1416// 科学计数法printf("科学计数法: %e\n", pi);      // 3.141593e+00// 十六进制和八进制printf("十进制: %d\n", 255);         // 255printf("十六进制: %x\n", 255);       // ffprintf("八进制: %o\n", 64);          // 100return 0;
}

输入输出重定向

在命令行中,可以使用重定向操作符:

#include <stdio.h>int main() {int number;// 从标准输入读取,可能会被重定向while(scanf("%d", &number) == 1) {printf("读取到: %d\n", number);}return 0;
}

使用方法:

  • ./program < input.txt - 从文件输入
  • ./program > output.txt - 输出到文件
  • ./program < input.txt > output.txt - 同时重定向输入和输出

http://www.dtcms.com/a/526302.html

相关文章:

  • Shiro反序列化漏洞提权渗透实战:原理+复现(CVE-2016-4437)
  • 百讯科技网站建设做图标去什么网站找
  • 做网站服务器电脑配置医院网站建设合同范本
  • icp备案域名网站备案信息网站联盟的基本流程
  • 男和男人怎么做那个视频网站苏州的网络企业
  • 一个网站开发的流程二次开发创造作用
  • 网站怎么做认证免费网站备案号码
  • 西安网站开发的未来发展东莞企业官方网站建设
  • 11. Python 列表: 元素增操作详解
  • 記錄js中的冒泡事件
  • 腾讯云 怎样建设网站域客式单页网站能申请域名吗
  • 西双版纳州住房和城乡建设局网站wordpress注册美化
  • 多种方法找回Root密码详细操作步骤
  • 阿里云服务器建设网站视频网站用什么做的好
  • 大专生工作后还能专升本吗?对职业发展有帮助吗?
  • 棉桃剥壳机做网站重庆网站推广营销
  • 大学生简历免费制作网站互联网备案服务平台
  • 哪些网站用django做的狼雨seo网站排名查询
  • 网站制作公司推荐深圳黑马品牌网站设计
  • 做网站需要字体切换从用户旅程角度做网站分析
  • 橙色主题手机网站希爱力副作用太强了
  • 数字化转型:概念性名词浅谈(第八十讲)
  • 公司注册网站模板长沙口碑好网站建设企业
  • leetcode学习笔记3:轮转数组(多次翻转数组思想)
  • 新手网站建设教程图书宁波企业建站程序
  • 银川做网站建设wordpress多条件过滤
  • 【shell】每日shell练习:系统备份文件管理/系统性能趋势分析
  • 重庆门户网站开发报价app开发公司十强
  • 广东建设协会网站首页关键词推广seo
  • Orleans 配置方式时序图