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!
相关推荐
三维空间1 小时前
MATLAB数组创建完全教程:直接赋值/linspace/zeros/ones/rand函数用法与实战
matlab
逆小舟2 小时前
【matlab】simulink实践经验(12.3)
开发语言·matlab
科技观察2 小时前
国产MATLAB替代软件的关键能力与生态发展现状
大数据·人工智能·matlab
Dev7z3 小时前
基于MATLAB小波变换的音频水印算法研究与实现
开发语言·matlab·音视频
cici158744 小时前
MATLAB/Simulink单相光伏并网逆变器仿真
开发语言·matlab
Dev7z4 小时前
基于MATLAB小波分析的图像增强算法及其仿真实现
开发语言·matlab
机器学习之心4 小时前
MATLAB基于极差法和灰色关联分析的40Cr零件内孔珩磨参数优化
matlab·灰色关联分析
aini_lovee5 小时前
基于UERD算法的JPEG图像隐写MATLAB实现
开发语言·算法·matlab
Dev7z7 小时前
基于MATLAB的风向和天气条件下污染物扩散模拟与可视化系统
人工智能·算法·matlab