C++程序设计-大模型思维与实践课件 第04章 输入输出和文件_第1页
C++程序设计-大模型思维与实践课件 第04章 输入输出和文件_第2页
C++程序设计-大模型思维与实践课件 第04章 输入输出和文件_第3页
C++程序设计-大模型思维与实践课件 第04章 输入输出和文件_第4页
C++程序设计-大模型思维与实践课件 第04章 输入输出和文件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章输入输出和文件C++程序设计——大模型思维与实践内容导航引言实践探究:输入输出格式输入对象cin大模型探究输出对象cout本章小结文件输入输出和文件3输入输出(I/O)是连接程序与外部世界的桥梁,是实现人机交互、数据处理与存储的关键环节。输入输出指的是从计算机的角度出发,将其自身视为中心,信息流入计算机为输入,从计算机流出为输出。常见的输入设备键盘:实时向程序输入数据。磁盘:存储的文件,是重要的数据来源之一。网络:从网络上读取数据。常见的输出设备屏幕:即时看到程序的运行结果磁盘:除了作为输入源,磁盘也是保存程序输出结果的重要场所。打印机输入输出设备内容导航输入输出和文件引言实践探究:输入输出格式输入对象cin大模型探究输出对象cout本章小结文件5cin是C++标准库中的一个对象,代表程序的标准输入流。通常与>>操作符结合使用,从键盘接收用户输入的数据,存储到相应的变量中。cin>>当使用cin>>读取数据时,例如执行到cin>>ch;,程序会中断执行,等待用户输入。读取规则:程序会忽略用户输入中起始的空白字符(空格键、制表键或回车符),直到用户输入一个非空白字符才真正读取数据。一旦开始读取,cin会根据>>运算符后变量的类型读取,直到遇到下一个空白字符或无效输入时停止读取。通常用于读取由空白字符分隔的若干数据项。输入cin6例:inta,b;charch;cin>>a>>b>>ch;cout<<"输入的数据为:"<<a<<""<<b<<""<<ch<<endl;程序运行结果如下(下画线部分为输入):3582984+输入的数据为:3582984+其中,第一行输入的358前面有3个空格第2行的2984前面有一个空格“+”前面有3个空格输入cin首先执行cin>>a,将忽略第一行开头的空格,读取358(遇到8之后的回车符结束读取)存入整型变量a。然后执行cin>>b,将忽略第一行末尾的换行符以及第二行开头的空格,读取2984(遇到4之后的空格结束读取)存入变量b。执行cin>>ch时,将忽略“+”前面的3个空格,读取字符'+'(读取字符时,仅读取一个字符)存入变量ch7cin.get()cin>>不能读取空白字符到字符型变量中,当要求能读取任意字符(包括空格、回车符等),通常使用cin.get()函数进行读取。get函数:cin对象的成员函数,需要使用“cin.”作为前缀调用该函数。如果程序需要存储读进来的字符,可以用以下两种方式调用cin.get函数。charch;cin.get(ch);//方式1:ch变量作为函数的输入参数放在圆括号内,读取的字符存到ch中ch=cin.get();//方式2:使用cin.get()函数的返回结果赋值给ch变量如果程序只需要读取字符但不需要存储:cin.get();输入cin8【例4-1】get函数的3种调用方式get函数的3种使用方式intmain(){charch;cout<<"Thisprogramhaspaused.PressEntertocontinue.";cin.get(ch);cout<<"Pausedagain.PleasepressEnteragain.";ch=cin.get();cout<<"Pausedforathirdtime.PleasepressEnteragain.";cin.get();cout<<"Thankyou!\n";return0;}Thisprogramhaspaused.PressEntertocontinue.回车Pausedagain.PleasepressEnteragain.回车Pausedforathirdtime.PleasepressEnteragain.回车Thankyou!9键盘输入缓冲区用于暂存用户通过键盘输入的字符(当用户敲击键盘时,输入的数据并非直接送达程序,而是先被存储在缓冲区中。当程序需要读取这些数据时,再从缓冲区中逐一取出。)键盘输入缓冲区键盘输入缓冲区程序读取键盘上输入的每一个字符都会被依次存储到键盘缓冲区中,随后,通过cin>>(或其它输入函数)从缓冲区中逐个读取数据。下图假设从键盘输入了“ப123.4ப5回车”10键盘输入缓冲区输入语句在读入时的规则:如果缓冲区里没有数据,则输入语句会一直等待,直到用户输入数据。缓冲区里有数据时,根据输入语句不同,读入规则略有区别:1.用cin>>读入数据(1)忽略开头遇到的空白字符(空格、制表符、回车符等,可以忽略连续的若干个)。(2)尝试读取尽可能多的合法字符构成一个有效数据,遇到非法字符则结束读取。(3)如果读取成功,将读入数据存储在提供的参数中;否则,不存储任何值。11举例:(从键盘输入“ப123.4ப5回车”)①执行cin>>a>>b:读取结果为:a=123,b读不进数据。因为在输入a时,首先遇到空格,则忽略,然后读取“123”,字符3之后的点号,不属于整数的一部分,为非法字符,中断输入,所以a读取到123。读取a之后,缓冲区里留下的数据为

此时尝试读取数据到b,直接遇到了点号,对于整型数据,点号为非法字符,读取失败,所以b的值保持不变(保持为随机值)。②执行cin>>c>>d:读取结果为:c=123.4,d=5.0。说明:读取c之后,缓冲区里留下的数据为:③执行cin>>ch>>d:读取结果为:ch=1,d=23.4。键盘输入缓冲区变量定义:charch;inta,b;doublec,d;122.使用cin.get()读入字符数据(1)尝试读取一个字符,并将其存储在提供的参数中(注意,如果为空白字符,也将读取)。(2)如果读取不成功,不存储任何值(只有当输入流结束才导致读取不成功,否则,如果缓冲区里暂时没数据,会一直等待用户输入)。举例:(从键盘输入“ப123.4ப5回车”)执行cin.get(ch):ch读取到第1个字符,为空格。键盘输入缓冲区变量定义:charch;inta,b;doublec,d;内容导航输入输出和文件引言实践探究:输入输出格式输入对象cin大模型探究输出对象cout本章小结文件14cout是C++标准库中定义的一个对象,专门用于处理控制台输出。默认以十进制输出整数,可以通过操纵符(如hex、oct、dec)分别将整数以十六进制、八进制和十进制的形式输出。cout<<hex<<255;//以十六进制输出255(显示FF)cout<<oct<<15;//以八进制输出15(显示17)cout<<dec<<10;//以十进制输出10(显示10)对于cout<<的输出格式,可以通过多种方式进行控制,以满足不同的输出需求。输出n位小数(setprecision、fixed操纵符)总共占用的宽度(setw操纵符)左对齐(left操纵符)填充字符(setfill操纵符)科学计数法表示(scientific操纵符)输出对象cout15setprecision操纵符:控制浮点数的有效数字个数setprecision与fixed操纵符结合使用:控制小数点后的数字个数。输出n位小数#include<iostream>#include<iomanip>//注意包含此头文件usingnamespacestd;intmain(){cout<<20.784356<<endl;//系统默认setprecision(6),为6位有效数字cout<<setprecision(5)<<20.784356<<""<<200<<""<<1.83569734<<endl;cout<<fixed<<setprecision(5)<<20.784356<<""<<1.83569734;return0;}运行结果:20.784420.7842001.835720.784361.83570(1)setprecision只对浮点数起作用(对整数不起作用),并且一经设置,对接下来输出的所有浮点数都起作用。(2)单独使用setprecision时将设置输出数字的总位数,和fixed配套使用时,将设置小数点后的位数。小数点后舍去的部分将被四舍五入。由于setprecision一经设置,对接下来输出的所有浮点数都起作用,该设置省略也将输出5位小数。16setw操纵符用于设置输出字段的宽度(位数)如果实际输出的字符数少于设置的宽度,则默认在左侧填充空格cout<<setw(5)<<20.784356<<setw(5)<<200<<setw(5)<<1.83<<endl;输出结果:20.78442001.83总共占用的宽度setw仅对紧随其后的一次输出有效,因此希望以上代码中每一项都以宽度5输出时,需要在每一个输出项前添加setw。当设置setw(n)时,如果输出内容本身超出n位,则完整输出该数据以上的20.874356,默认输出6位数,加上小数点,宽度为7,超出了setw(5)的限制,因此将按照所需宽度7输出。17cout输出时默认右对齐(居右)setw操纵符会在输出字段的左侧填充空格以实现指定的宽度要实现左对齐(居左),可以使用left操纵符。cout<<left;cout<<setw(5)<<1<<setw(4)<<7.5<<setw(4)<<100<<endl;cout<<setw(5)<<1.52<<setw(4)<<73<<setw(4)<<12<<endl;输出结果:左对齐第一行第一列输出的1,由于只占1位的宽度,其右侧填充4个空格。第二行第一列的1.52占4位的宽度,其右侧填充1个空格。17.51001.527312每一行输出3项,由于都使用setw设置了输出宽度,并且都为左对齐,所以可看作输出的数据中共包含三列,每一列都居左对齐。左对齐一经设置,对接下来的所有输出都起作用。要恢复为右对齐,可使用right操纵符。18除了使用空格作为填充字符外,还可以使用其它字符进行填充,通过setfill操纵符实现。cout<<setfill('0');cout<<2025<<"-"<<setw(2)<<3<<"-"<<setw(2)<<1<<endl;输出结果:2025-03-01填充字符输出的3和1占2位宽度,默认右对齐,左侧需要填充字符。本例中填充字符0,因此输出的3和1分别为03和01。19以科学计数法的形式输出浮点数,可以通过scientific操纵符实现。同时,结合setprecision可以控制科学计数法中小数部分的位数。例如:cout<<scientific<<setprecision(2)<<1234567.89<<endl;输出结果:1.23e+06科学计数法表示内容导航输入输出和文件引言实践探究:输入输出格式输入对象cin大模型探究输出对象cout本章小结文件21键盘作为输入源与屏幕作为输出终端,构成了最基本的交互模式。仅依靠这种即时性的交互方式,难以满足数据的持久化存储需求。通过cin从键盘接收用户输入的数据,在计算机内部经过一系列处理,利用cout将结果即时显示在屏幕上时,这些数据仅在程序运行期间有效。一旦程序终止,所有在内存中存储的数据亦随之消失,若需再次使用这些数据,则必须重新进行输入操作。C++提供文件操作功能,允许程序将处理后的数据保存至外部存储介质(如硬盘)的文件中通讯录信息处理:用户从键盘输入联系人信息后,在通过屏幕显示以确认无误后,可通过文件操作将其保存至一个特定的文件中。即便程序关闭或重启,甚至重启电脑,只要该文件得以妥善保存,用户先前输入的所有通讯录信息均可通过读取该文件得以恢复,实现了数据的持续使用。生活中的例子:PPT文件、MP3文件、MP4文件、JPG文件、CPP文件文件介绍22文件介绍根据数据的表示和存储方式分为:文本文件和二进制文件。文本文件由一系列字符组成,包括英文字符和中文字符等。通常以“.txt”作为文件扩展名,如“example.txt”。C++源程序文件(如test1.cpp)也是文本文件。二进制文件以二进制序列(即0和1的序列)存储。不依赖字符编码,需要通过特定程序解释其内容。能够保存任意类型的数据。适用于数据量较大或需要高效读写的应用场景。PDF、JPG、MP3等,都是二进制文件。通过特定的编码和解码算法,实现了数据的压缩、加密和多媒体内容的存储。实际应用中,可能会遇到各种以不同扩展名命名的文本文件。为了简单地进行分辨,一个有效的方法是尝试使用Windows的记事本程序打开这些文件。如果文件能够顺利打开且内容显示正常(不出现乱码),那么该文件即可被视为文本文件。23文件操作通常包含三个基本步骤:打开文件、输出内容或读取内容、关闭文件。打开文件需要先创建文件流对象(键盘输入有cin对象,屏幕输出有cout对象)基于三个类创建和操作文件流对象ofstream:文件输出ifstream:文件输入fstream:文件输入/输出创建文件流对象并与具体文件关联的语法如下:流类型

对象;//首先创建对象对象.open(文件路径,打开模式);//使用成员函数将对象与文件关联或者:流类型

对象(文件路径,打开模式);//两个步骤合并为一个操作文件操作:打开文件24文件路径指定要操作的文件的位置。可以只包括一个文件名,如"example.bin",则在当前目录下查找(或创建)该文件。也可以是绝对路径,如"D:\\example.bin"或"D:/example.bin",表示程序将到D盘的根目录下查找(或创建)该文件。文件操作:打开文件路径分隔符号为"\\"或"/",不能写成"D:\example.bin"。对象.open(文件路径,打开模式);流类型

对象(文件路径,打开模式);例:ofstreamfs("example.bin",ios::out|ios::binary);25文件打开模式标识符文件操作:打开文件模式含义ios::in为输入(读)而打开文件ios::out为输出(写)而打开文件ios::ate初始读写位置为文件尾,但可以通过函数改变读写位置ios::app所有输出附加在文件末尾,不能指定输出到其它位置ios::trunc如果文件已存在则先清空该文件ios::binary操作对象为二进制方式例:ofstreamfs("example.bin",ios::out|ios::binary);打开模式中,包含标识符ios::binary,表示打开的是二进制文件。如果不包含该标识符,则打开的是文本文件。26ofstream,ifstream和fstream都包含一个默认打开模式:只有当创建文件流对象或者调用其open函数时没有提供第二个参数“打开模式”的情况下,默认值才起作用。如果提供了第二个参数,默认值将不起作用,也不会与提供的参数进行组合。定义文件流对象并打开文件:ofstreamfs("example.bin",ios::out|ios::binary);可以根据对象if(fs)来判断文件是否已经被顺利的打开。文件操作:打开文件类参数的默认方式特点ofstreamios::out|ios::trunc如果文件不存在,则创建新文件;如果文件存在,则清空文件原内容(相当于创建了一个新文件)。ifstreamios::in如果文件存在,则成功打开,否则打开失败。fstreamios::in|ios::out如果文件不存在,则打开失败。如果文件存在,则保留原有内容,从文件起始位置开始读或写(采取覆盖的方式写)。27【例4-2】创建文件流对象,并判断文件是否被成功打开文件操作:打开文件#include<fstream>//需要包含该头文件#include<iostream>usingnamespacestd;intmain(){//创建fstream对象并打开文件fstreamfs("example.txt",ios::out);//打开模式为ios::out,用来输出内容到文件if(!fs){//检查文件是否成功打开cout<<"文件打开失败"<<endl;return1;//返回非零值表示程序执行失败}//如果文件成功打开,则执行相应的操作,例如输出内容到文件fs.close();//文件使用完毕,需要关闭文件return0;}程序运行不会输出任何信息到屏幕,将在当前目录下创建一个文件example.txt。282.文件读写(1)写出到文本文件:文本文件的读写操作与cin和cout的使用方式完全一样。将文件当成屏幕,想象使用cout将内容输出到屏幕,只需将cout替换成文件对象。假设我们有两个变量,doubled=123.4;inta=5;。cout<<d<<""<<a;//输出到屏幕fs<<d<<""<<a;//输出到文件

文件操作:文件读写29使用与cout相同的语法,通过fs将变量的值输出到文件中。文件操作:文件读写#include<fstream>#include<iostream>usingnamespacestd;intmain(){fstreamfs("example.txt",ios::out);if(!fs){cout<<"文件打开失败"<<endl;return1;}doubled=123.4;inta=5;fs<<d<<""<<a;fs.close();return0;}30将代码保存为D:\prog\test1\main.cpp,使用VS运行以上代码,可以在当前目录下(源文件main.cpp所在的目录,即D:\prog\test1目录)找到名为example.txt的文件。用记事本打开该文件,可以看到其内容。文件操作:文件读写31在资源管理器中,对文件example.txt点右键,单击“属性”,可查看文件大小为7字节。文件中包含7个ASCII字符,每个字符占一个字节,因此大小为7字节。文件操作:文件读写322.文件读写(2)从文本文件读取:想象使用cin从键盘读入字符,将cin替换成文件对象。有变量定义:doubled;inta;执行输入:cin>>d>>a;时,可以从键盘输入“123.45”,即可使得d和a的值分别为123.4和5。如何从前面的example.txt中读取数据到d和a呢?文件操作:文件读写33【例4-3】从文本文件读取数据。文件操作:文件读写#include<fstream>#include<iostream>usingnamespacestd;intmain(){fstreamfs("example.txt",ios::in);//打开模式ios::in使得可从文件读取数据if(!fs){cout<<"文件打开失败"<<endl;return1;}doubled;inta;fs>>d>>a;cout<<d<<""<<a;fs.close();return0;}342.文件读写(3)二进制文件读写:对于二进制文件,一般使用成员函数read()和write()进行读写:read(char*buf,intnum);

write(char*buf,intnum);read()从文件中读取num个字节到buf指向的缓存中,如果文件内容不足num个字节,可以用函数gcount()获知实际读取的字节数;write()从buf指向的缓存写num个字节到文件中。文件操作:文件读写353.关闭文件关闭文件需要调用成员函数close(),它负责将缓存中还未及时写入到文件的数据写到文件中并关闭文件。close()函数一旦被调用,相应的流对象可以与其它文件关联,被关闭的文件也可以再被其它的程序访问。不及时关闭文件可能造成一些不好的后果:其它地方的代码(或其它程序)无法打开该文件。缓存中还未及时写入文件的数据丢失,从而造成文件内容不正确。养成习惯:在使用完文件后,及时关闭它。文件操作:关闭文件36文件读写位置指针控制文件读写操作的具体位置输入位置指针:指示从文件中读取数据的位置,决定了下一次读取操作将从文件的哪个位置开始。输出位置指针:指示向文件中写入数据的位置,决定了下一次写入操作将从文件的哪个位置开始。随着读写操作自动改变输入位置指针:每读一个字符,位置指针往后移动一个字符,底层原理与键盘输入缓冲区原理一致。输出位置指针:每次执行写入操作时,输出位置指针都自动指向最后输出位置的下一个位置。文件读写位置指针37假设某文件的内容包含两行,第一行为“123.45回车”,第二行为“6.78回车”。创建文件流对象fs并与该文件关联后,文件流内部的缓冲区内容为:“ப123.4ப5回车6.7ப8回车”用ios::in模式打开文件后的初始输入位置指针p1,指向缓冲区中的第1个字符。如果有代码:doubled;fs>>d;在执行>>操作时,首先忽略开头的空白字符,然后读取123.4到double型变量d中,此时输入位置指针如图中p2,指向空格字符。下次执行读操作时,将从该位置开始读取。文件读写位置指针p1p238针对不同的应用需求与场景,需要选择恰当的文件打开模式。(1)只读模式:仅将文件数据从硬盘载入内存以供使用,确保文件内容保持原状。如观看视频、聆听音乐、浏览电子书籍等(2)写入模式:希望将内容保存至磁盘,则需采用“写入”模式,从而实现数据的持久化存储。(3)追加写模式:对于日志文件或某些辅助工具(如编程助手)生成的记录文件,其典型特征是持续向文件末尾追加新内容而非覆盖原有数据。采用“追加写”模式打开文件,确保新数据被正确添加至文件尾部。(4)读写结合模式:在已有文件基础上进行修改。推荐采用分步操作策略:读取阶段:以“只读”模式打开文件,将原始内容载入内存,成功载入后关闭文件;编辑阶段:在内存中对数据进行修改;保存阶段:以“写入”模式重新打开文件(清空原文件内容),将所有内容写入磁盘。应用场景与打开模式39通常用到的打开模式是标识符的组合ofstreamfs("example.bin",ios::out|ios::binary);打开模式ios::out|ios::binary表示该文件以输出(ios::out)模式被打开,且为二进制文件(ios::binary),两个标识符之间以一根竖线运算符连接起来。应用场景与打开模式在后续讨论文件的打开模式时,一律不包含ios::binary标识符,表示操作对象为文本文件。如果添加上“ios::binary”,即代表操作对象为二进制文件。40应用场景:记录体重等信息【例4-4】记录当前体重等信息,只保留最后一次输入的值(历史数据被覆盖)。写入模式#include<iostream>#include<fstream>usingnamespacestd;intmain(){//假设以下数据为用户输入

intage=30;chargender='M';//或'F'doubleweight=70.5;//创建一个ofstream对象,用于写文件,并采用ios::out|ios::trunc模式打开文件

ofstreamoutFile("weight.txt",ios::out|ios::trunc);if(!outFile){cout<<"无法打开文件进行写入。"<<endl;return1;}outFile<<age<<""<<gender<<""<<weight;outFile.close();return0;}以ios::out|ios::trunc模式打开文件若文件原本不存在,则创建一个新文件用于输入;若文件已存在,其原有内容将被清空(所以历史数据不能保留),然后存储新写入的数据。41以上代码中,ios::out|ios::trunc是ofstream的默认打开模式。而ios::trunc是ios::out的默认行为之一,它明确表示在打开文件时会清空文件的内容。三种等价的创建文件流对象的方式:ofstreamoutFile("weight.txt",ios::out|ios::trunc);ofstreamoutFile("weight.txt",ios::out);//隐含了ios::trunc的行为ofstreamoutFile("weight.txt");//ofstream的默认打开模式为ios::out|ios::trunc也可以用fstream类创建文件流对象,效果与上面ofstream流对象等价:fstreamoutFile("weight.txt",ios::out|ios::trunc);fstreamoutFile("weight.txt",ios::out);//隐含了ios::trunc的行为写入模式42应用场景:从包含体重记录的文件中读取数据【例4-5】:从weight.txt文件读取年龄、性别和体重。txt文件的内容格式为:30M70.5(空格分隔)只读模式#include<iostream>#include<fstream>usingnamespacestd;intmain(){

//创建一个ifstream对象,用于读文件,并采用只读模式(默认模式)打开文件

ifstreaminFile("weight.txt",ios::in);

//验证文件是否成功打开

if(!inFile){

cout<<"无法打开文件进行读取。"<<endl;

return1;

}43只读模式

//定义变量以存储从文件中读取的数据

intage;

chargender;doubleweight;

//从文件中读取数据,注意读取的顺序和类型必须与文件中的数据格式相匹配inFile>>age>>gender>>weight;cout<<"年龄:"

<<

age<<endl;cout<<"性别:"

<<

gender<<endl;cout<<"体重:"<<weight<<"kg"<<endl;inFile.close();

return0;}以ios::in模式打开文件后,如果文件不存在,则打开操作失败;若文件存在,则打开文件并从文件起始位置开始读取数据。txt文件的内容格式为:30M70.544以上代码中,ios::in是ifstream的默认打开模式。两种等价的创建文件流对象的方式:ifstreaminFile("weight.txt",ios::in);ifstreaminFile("weight.txt");也可以用fstream类创建文件流对象,效果与上面ifstream流对象等价:fstreaminFile("weight.txt",ios::in);只读模式45应用场景:持续记录体重【例4-6】每日记录体重,并在文件中存储所有体重数据,方便将来观察体重变化趋势。追加写模式#include<iostream>#include<fstream>usingnamespacestd;intmain(){intage;chargender;doubleweight;cin>>age>>gender>>weight;ofstreamoutFile("weight.txt",ios::app);if(!outFile){cout<<"无法打开文件进行写入。"<<endl;return1;}outFile<<age<<""<<gender<<""<<weight<<endl;outFile.close();return0;}先在当前目录寻找weight.txt,如果找到,则将其删除,确保观察到从无到有的过程,然后再观察“追加”的特点。第一次运行,从键盘输入: 30M70.5第二次运行,从键盘输入: 31M72fstream类也可以胜任追加写模式,可以使用以下方式创建文件流对象:fstreamoutFile("weight.txt",ios::app);46以上代码中,使用ios::app模式打开文件时,如果文件不存在,则创建新文件;如果文件存在,则打开文件后,文件输出指针位于文件末尾,输出内容时只能添加到文件末尾。ios::ate模式打开文件时,文件读写位置指针也将位于文件末尾,但可以使用流对象的成员函数seekg()和seekp()将文件指针移动到其它位置,实现文件的随机访问。但ios::app在执行写操作时,只能写到文件末尾,无法将文件指针移动到其他位置进行写操作。追加写模式内容导航输入输出和文件引言实践探究:输入输出格式输入对象cin大模型探究输出对象cout本章小结文件48【例4-7】编写程序,输入日期以及当天的体重和身高,计算并输出该日期和相应的BMI指数。BMI的计算公式为:BMI=体重(千克,kg)/身高²(米,m²)输入格式为:2024-8-3701.7输出格式为:2024-08-0324.221其中,月和日不足两位的左侧补0,输出的BMI保留3位小数。实践探究1.解决思路与困难(1)读取输入:从标准输入读取日期、体重和身高。(2)计算BMI:使用给定的公式计算BMI。(3)输出日期:确保月和日不足两位时左侧补0。(4)输出BMI:保留3位小数。49输入输出格式可能存在三个困难:(1)cin>>输入时,数据之间以空白符(例如空格)分隔,但本题的格式要求为减号分隔的日期,例如2024-8-1。(2)cout<<输出日期时,要求月和日不足两位时左侧补0。(3)cout<<输出BMI时,要求保留3位小数。实践探究502.使用编程助手读取日期根据以上思路,首先定义变量,然后撰写注释,注释如下://输入y,m,d,输入的格式为2024-8-3,要求从中读取y为2024,m为8,d为3。要求编程助手提供输入语句的建议,但是代码不正确。实践探究51修改注释,将注释写得更具体,如下://输入y,m,d,输入的格式为2024-8-3,要求从中读取y为2024,m为8,d为3。//读取2024后,要求能跳过-,然后读取8,然后再跳过-,然后读取3,最后结束。实践探究52【提问】编写C++输入语句,输入y,m,d,输入的格式为2024-8-3,要求从中读取y为2024,m为8,d为3。【回复】要从输入的日期字符串中读取年、月、日,可以使用cin通过逐个读取并跳过分隔符来实现。#include<iostream>usingnamespacestd;intmain(){intyear,month,day;chardash1,dash2;//读取输入的日期字符串并解析

cin>>year>>dash1>>month>>dash2>>day;//输出解析结果

cout<<"Year:"<<year<<",Month:"<<month<<",Day:"<<da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论