MATLAB输入输出完全教程:input/disp/fprintf函数用法与实战

MATLAB作为工程计算领域的核心工具,输入输出(I/O)是其基础且高频使用的功能。本文详细讲解MATLAB中最常用的input()disp()fprintf()三个I/O函数的语法、用法差异及实战场景,内容覆盖新手入门到进阶应用,帮助快速掌握MATLAB数据交互核心技能。

一、input()函数:从控制台获取用户输入

input()是MATLAB中接收用户手动输入的核心函数,能读取数值、字符串、矩阵等多种类型数据,是交互式程序的基础。

1. 基本语法

matlab 复制代码
变量 = input(提示信息);          % 读取数值/矩阵类型输入
变量 = input(提示信息, 's');     % 强制读取字符串类型输入

2. 核心用法示例

示例1:读取数值输入

matlab 复制代码
% 读取单个数值
age = input('请输入你的年龄:');
disp(['你的年龄是:', num2str(age)]);

% 读取矩阵输入
matrix = input('请输入一个2x2矩阵(如[1 2;3 4]):');
disp('你输入的矩阵是:');
disp(matrix);

运行效果

css 复制代码
请输入你的年龄:25
你的年龄是:25
请输入一个2x2矩阵(如[1 2;3 4]):[1 2;3 4]
你输入的矩阵是:
     1     2
     3     4

示例2:读取字符串输入

若直接使用input()读取字符串(如姓名),不加s参数会报错,需指定s参数:

matlab 复制代码
% 错误用法(会报错)
% name = input('请输入你的姓名:');

% 正确用法
name = input('请输入你的姓名:', 's');
disp(['你好,', name, '!']);

运行效果

复制代码
请输入你的姓名:张三
你好,张三!

3. 注意事项

  • 输入数值时,可直接输入整数、小数、科学计数法(如1.2e3);

  • 输入矩阵时,需遵循MATLAB矩阵语法(方括号包裹,行内元素用空格/逗号分隔,行之间用分号分隔);

  • 若用户仅按回车,input()会返回空矩阵,可结合isempty()做输入校验:

    matlab 复制代码
    num = input('请输入一个数字:');
    if isempty(num)
        disp('错误:未输入任何内容!');
    end

二、disp()函数:简洁的控制台输出

disp()是MATLAB最基础的输出函数,特点是简洁、无格式符、直接输出内容,适合快速展示变量或文本。

1. 基本语法

matlab 复制代码
disp(输出内容);  % 输出内容可为字符串、数值、矩阵、单元格数组等

2. 核心用法示例

示例1:输出字符串和数值

matlab 复制代码
% 输出纯文本
disp('MATLAB输入输出教程');

% 输出数值变量
score = 95.5;
disp(score);  % 直接输出95.5

% 拼接字符串+数值(需用num2str转换数值)
disp(['数学成绩:', num2str(score)]);

运行效果

复制代码
MATLAB输入输出教程
   95.5000
数学成绩:95.5

示例2:输出矩阵和单元格数组

matlab 复制代码
% 输出矩阵
A = [1 2 3;4 5 6];
disp('矩阵A:');
disp(A);

% 输出单元格数组
info = {'姓名', '年龄'; '李四', 30};
disp('个人信息:');
disp(info);

运行效果

arduino 复制代码
矩阵A:
     1     2     3
     4     5     6
个人信息:
    {'姓名'}    {'年龄'}
    {'李四'}    {[30]}

3. 优势与局限

  • 优势:语法简单、执行速度快,无需记忆格式符,适合快速调试;
  • 局限:无法自定义输出格式(如保留小数位数、对齐方式),无法同时输出多个不同类型变量(需手动拼接)。

三、fprintf()函数:格式化输出(进阶核心)

fprintf()是MATLAB功能最强大的输出函数,支持自定义格式(小数位数、对齐、进制转换),既可输出到控制台,也可写入文件,是工程应用中最常用的输出方式。

1. 基本语法

matlab 复制代码
% 输出到控制台
fprintf(格式字符串, 变量1, 变量2, ...);

% 写入文件(需先打开文件)
fid = fopen('文件名.txt', 'w');  % 打开文件,w=写入模式
fprintf(fid, 格式字符串, 变量1, 变量2, ...);
fclose(fid);  % 关闭文件

2. 核心格式符(必背)

格式符 说明 示例
%d 整数(十进制) fprintf('%d', 123) → 123
%f 浮点数 fprintf('%f', 3.14) → 3.140000
%.2f 保留2位小数的浮点数 fprintf('%.2f', 3.1415) → 3.14
%s 字符串 fprintf('%s', 'MATLAB') → MATLAB
%e 科学计数法 fprintf('%e', 123) → 1.230000e+02
\n 换行符 fprintf('第一行\n第二行') → 分行输出
\t 制表符(缩进) fprintf('列1\t列2') → 列1 列2

3. 核心用法示例

示例1:基础格式化输出

matlab 复制代码
% 保留小数位数
pi_val = pi;
fprintf('圆周率π保留3位小数:%.3f\n', pi_val);  % 输出:圆周率π保留3位小数:3.142

% 整数+字符串组合输出
id = 1001;
name = '王五';
fprintf('学号:%d,姓名:%s\n', id, name);  % 输出:学号:1001,姓名:王五

% 科学计数法输出
num = 12345.6789;
fprintf('科学计数法:%e\n', num);  % 输出:科学计数法:1.234568e+04

示例2:输出矩阵(按列遍历)

fprintf()处理矩阵时默认按列遍历,需结合循环控制输出格式:

matlab 复制代码
B = [1 2 3;4 5 6];
fprintf('矩阵B的元素:\n');
% 按行输出矩阵
for i = 1:size(B,1)
    fprintf('%d\t%d\t%d\n', B(i,:));
end

运行效果

css 复制代码
矩阵B的元素:
1       2       3
4       5       6

示例3:写入文件

matlab 复制代码
% 打开文件(不存在则创建,存在则覆盖)
fid = fopen('data.txt', 'w');
if fid == -1  % 校验文件是否成功打开
    disp('文件打开失败!');
else
    fprintf(fid, '数值\t平方值\n');  % 写入表头
    for x = 1:5
        fprintf(fid, '%d\t%d\n', x, x^2);  % 写入数据
    end
    fclose(fid);  % 必须关闭文件
    disp('数据已写入data.txt!');
end

生成的data.txt内容

复制代码
数值	平方值
1	1
2	4
3	9
4	16
5	25

4. 注意事项

  • 格式符数量需与变量数量匹配,否则会重复输出或报错;
  • 输出矩阵时需注意"按列遍历"的特性,避免输出顺序混乱;
  • 写入文件后必须用fclose(fid)关闭文件,否则数据可能丢失;
  • 追加写入文件可将fopen的模式改为'a'(append)。

四、三大函数对比与场景选择

函数 核心优势 适用场景 缺点
input() 接收用户交互式输入 需手动输入参数的交互式程序 仅用于输入,无输出功能
disp() 语法简单、输出快速 快速调试、简单文本/数值展示 无格式化能力,拼接复杂
fprintf() 自定义格式、支持文件写入 工程报告输出、数据保存、格式规整 语法稍复杂,需记忆格式符

选择建议

  • 快速看变量值 → 用disp()
  • 需自定义格式(保留小数、对齐、写入文件)→ 用fprintf()
  • 需用户手动输入数据 → 用input()
  • 交互式程序 → input() + fprintf()组合使用。

五、实战案例:综合应用

以下案例实现"输入学生信息 → 计算平均分 → 格式化输出并保存到文件":

matlab 复制代码
% 1. 接收用户输入
name = input('请输入学生姓名:', 's');
chinese = input('请输入语文成绩:');
math = input('请输入数学成绩:');
english = input('请输入英语成绩:');

% 2. 计算平均分
avg_score = (chinese + math + english)/3;

% 3. 控制台格式化输出
fprintf('\n=== 学生成绩报告 ===\n');
fprintf('姓名:%s\n', name);
fprintf('语文:%.1f\t数学:%.1f\t英语:%.1f\n', chinese, math, english);
fprintf('平均分:%.2f\n', avg_score);

% 4. 保存到文件
fid = fopen('score_report.txt', 'w');
if fid ~= -1
    fprintf(fid, '学生成绩报告\n');
    fprintf(fid, '姓名:%s\n', name);
    fprintf(fid, '语文:%.1f\n数学:%.1f\n英语:%.1f\n', chinese, math, english);
    fprintf(fid, '平均分:%.2f\n', avg_score);
    fclose(fid);
    disp('\n成绩报告已保存到score_report.txt!');
end

运行效果

ini 复制代码
请输入学生姓名:赵六
请输入语文成绩:88.5
请输入数学成绩:92
请输入英语成绩:79.5

=== 学生成绩报告 ===
姓名:赵六
语文:88.5	数学:92.0	英语:79.5
平均分:86.67

成绩报告已保存到score_report.txt!
相关推荐
春日见19 小时前
如何提升手眼标定精度?
linux·运维·开发语言·数码相机·matlab
ytttr8731 天前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
wuk9981 天前
matlab为地图进行四色着色
开发语言·matlab
元周民1 天前
matlab求两个具有共根的多项式的所有共根(未详细验证)
开发语言·matlab
代码小小只1 天前
考虑不确定性的电动汽车优化问题
matlab
yong99902 天前
基于小波分析与粒子群算法的电网潮流优化实现(MATLAB)
开发语言·算法·matlab
Dev7z2 天前
基于MATLAB HSI颜色空间的图像美颜系统设计与实现
开发语言·matlab
ghie90902 天前
MATLAB 高速公路裂缝检测
开发语言·matlab
天呐草莓2 天前
热传导方程
算法·matlab
hoiii1872 天前
基于MATLAB实现无监督数据建模
开发语言·matlab