clion 编写了一个C语言程序,在scanf函数的返回值之前的printf函数不执行。会先运行scanf函数的返回值哪位大神能帮帮忙吗?

没有更多推荐了,
不良信息举报
举报内容:
C语言中一个程序多次使用scanf函数
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!豆丁微信公众号
君,已阅读到文档的结尾了呢~~
c语言实验报告,c语言实验报告模板,c语言实验报告答案,c语言上机实验报告,c语言实验报告总结,c语言,c语言实验心得,c语言上机实验,c语言课程设计报告,c语言的实验报告
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
c语言实验报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1447)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'C语言printf和scanf函数详细用法',
blogAbstract:'Printf和Scan函数的使用方法一 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: & && &printf(\"&格式化字符串&\", &参量表&); & & 其中格式化字符串包括两部分内容: 一部分是正常字符,&&这些字符将按原 样输出; 另一部分是格式化规定字符, 以\"%\"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 & & 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出 参数个数一样多, 各参数之间用\",\"分开, 且顺序一一对应,&&否则将会出现意想 ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我在用c写程序,标准是C99,编译器是gcc。用的是windows下的Clion我有三个文件:main.c SeqList.c define.h在程序中我会定义结构体并且定义的结构体可能出现在任意一个源文件中,所以我的想法是在define.c中定义,然后供各个源文件使用。下面的代码是define.c中的全部代码
#ifndef DATA_STRUCTURE_DEFINE_H
#define DATA_STRUCTURE_DEFINE_H
#define MAX 100
//线性表的顺序存储结构
typedef struct
//指向第一个节点的指针
int *firstN
//表当前的长度
//表最大的长度
}SeqList, *PSeqL
#endif //DATA_STRUCTURE_DEFINE_H
我想在SeqList.c中使用define.c,下面是我的SeqList.c的代码
#include "define.h"
#include &stdio.h&
#include &stdlib.h&
* @param p
int initial(PSeqList p)
p-&length = 0;
p-&size = MAX;
p-&firstNode = (int *)malloc(sizeof(int)*(p-&size));
* @param p
int create(PSeqList p)
int *index = p-&firstN
if(p-&firstNode == NULL){
printf("Invalid list\n");
printf("Input the length of the node\n");
scanf("%d", &length);
for(i = 0; i & i++){
printf("Input the node value\n");
scanf("%d", index++);
下面的是main.c的代码
#include &stdio.h&
#include "SeqList.c"
int main()
SeqList seqL
initial(&seqList);
create(&seqList);
然后我点了Clion中的运行按钮,如下图
但是报错了,如下C:Program FilesJetBrainsCLion 2017.3bincmakebincmake.exe" --build D:phpStudyWWWdata-structurecmake-build-debug --target data_structure -- -j 2Scanning dependencies of target data_structure[ 33%] Building C object CMakeFiles/data_structure.dir/main.c.obj[ 66%] Building C object CMakeFiles/data_structure.dir/SeqList.c.obj[100%] Linking C executable data_structure.exeCMakeFilesdata_structure.dir/objects.a(SeqList.c.obj): In function `initial':D:/phpStudy/WWW/data-structure/SeqList.c:11: multiple definition of `initial'CMakeFilesdata_structure.dir/objects.a(main.c.obj):D:/phpStudy/WWW/data-structure/SeqList.c:11: first defined hereCMakeFilesdata_structure.dir/objects.a(SeqList.c.obj): In function `create':D:/phpStudy/WWW/data-structure/SeqList.c:23: multiple definition of `create'CMakeFilesdata_structure.dir/objects.a(main.c.obj):D:/phpStudy/WWW/data-structure/SeqList.c:23: first defined herecollect2.exe: error: ld returned 1 exit statusmingw32-make.exe[3]: * [CMakeFilesdata_structure.dirbuild.make:122: data_structure.exe] Error 1mingw32-make.exe[2]: * [CMakeFilesMakefile2:67: CMakeFiles/data_structure.dir/all] Error 2mingw32-make.exe[1]: * [CMakeFilesMakefile2:79: CMakeFiles/data_structure.dir/rule] Error 2mingw32-make.exe: * [Makefile:117: data_structure] Error 2
不知道是哪里做的不对,求大神指教。PS:我在Linux的虚拟机下执行没有任何问题
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一般情况下不要#include.c文件!!!在编译的时候,首先工作的是预处理器,预处理器将#include展开成对应文件的内容,这里你的SeqList.c文件里的函数定义就会被放进main.c中。接着编译器会实际编译被预处理器处理过的main.c和SeqList.c,然后就得到了两份SeqList.c中的函数定义对应的汇编/机器码。接着会链接,有两组名字一样的函数定义,自然就链接不上了……解决方案就是另外做一个SeqList.h放函数的声明,然后#include .h文件Linux不会报错大概是编译器的容错机制做的好吧……
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。printf 和scanf函数是C语言中最常用的输入出函数,从学习C语言开始,就开始使用这两个函数,然而当写用C语言写单片机程序时却不能使用这两个函数,总觉得单片机的C语言和一般的C语言差别很大,写起来不大方便;其实,单片机的C语言也是标准C语言上扩展或是改动的,都支持格式化输入输出函数(printf 和scanf);事实上,printf,scanf只负责格式化输入输出的字符,至于从哪儿输入,输出到哪儿,他们分别依靠getchar和putchar函数,只要实现单片机上的getchar函数和putchar函数,即可正常使用printf函数和scanf函数,这可以给我们单片机的信息交互带来很多方便。下面我们就来实现他们的移置。
硬件介绍:
硬件部分只需字符型输入输出设备:scanf从输入字符型设备读取字符,printf输出到字符型输出设备。在这里,我选用的字符型输入设备是超级终端,通过串口与单片机连接,输入字符;输出设备是超级终端和12864的液晶。scanf从串口读入字符,printf输出字符到串口和液晶。
有关串口的预提信息参考:。
有关液晶的具体信息参考:。
scanf还可以从按键读取信息,可以参考移置方法自行移置。
程序实现:
单片机在调用printf时,printf是负责将数据解析成ASCII码流,通过调用putchar函数依次将字符发出。如果在putchar内编写从串口发送一字节数据,则printf的结果将从单片机串口发送出;如果putchar是向液晶写字符,让液晶显示一个字符,则printf的结果将显示在液晶上。本程序实现putchar同时向串口和液晶同时发送一个字符(液晶是显示一个字符)。
putchar函数如下:
int putchar(int ch)
putchar2Com(ch);
putchar2Lcd(ch);
return (ch);
程序先向串口发送一个字符,然后像向晶发送字符。
其中:putchar2Com,向串口发送一个字符,代码如下:
int putchar2Com(int ch)
if (ch == '\n')
'\n'(回车)扩展成 '\n''\r' (回车+换行)
UartWriteChar('\r') ;
//0x0d 换行
UartWriteChar(ch);
//从串口发出数据
return (ch);
代码仅仅调用向串口写字符的函数UartWriteChar(ch)(详见Uart.c,在&二&中有介绍),当要输出换行时,需先输出’\n’将光标移至本行首位置,还需要’\r’(换行)才能将光标置于下一行起始位置,即将’\n’扩展为’\r’,’\n’两个字节依次发出。
purchar2Lcd函数比较复杂,因为我所使用的12864液晶是中文字库的液晶,每行8个地址,可以显示8个中文字符或16个英文字符,而putchar只发出一个字节,需要判断每个地址的前半字还是后半字(因为每个字可以显示中文,如果中文的两个字节在相邻的两个地址上,将不会显示,或是显示乱码)。
int putchar2Lcd(int ch)
char addr,
if (ch == '\n')
'\n'(回车),换行
ChangeNextRow();
addr = LcdReadAddr();
if(ch & 0x80)
LcdWriteData(ch);
LcdWriteData(0x20);
//写入一个空字符,根据地址判断是否为前半字
if(addr == LcdReadAddr())
//前半字 从新写入ch字符
LcdWriteComm(addr);
LcdWriteData(ch);
LcdWriteComm(addr);
dat = LcdReadData();
if(dat & 0x80)
//前一个字符是英文字符
LcdWriteData(0x20);
LcdWriteData(ch);
if((addr != LcdReadAddr()) &&
//写入的是行最后位的后半字则换行
(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))
ChangeNextRow();
return (ch);
这个函数首先判断换行;然后处理其他一般字符,如果是英文字符,不用考虑前后半字,只需正常写入液晶即可;如果是中文字符,在判断是否是前半字,前半字则直接写入,后半字则判断之前写入的前半字是否是中文,是则直接写入,不是则把英文字符移入后半字,然后写入;最后判断是否到行尾,是则换行。
程序更新为:更新日期::51
目的是修复原来,行尾前半字为英文,再输入中文会显示乱码。
int putchar2Lcd(int ch)
char addr,
char changeRowFlag = 0;
if (ch == '\n')
'\n'(回车),换行
ChangeNextRow();
changeRowFlag = 1;
else if (ch == '\b')
// '\b' (退格)
BackSpace();
addr = LcdReadAddr();
if(ch & 0x80)
LcdWriteData(ch);
LcdWriteData(0x20);
//写入一个空字符,根据地址判断是否为前半字
if(addr == LcdReadAddr())
//前半字 从新写入ch字符
LcdWriteComm(addr);
LcdWriteData(ch);
LcdWriteComm(addr);
dat = LcdReadData();
if(dat & 0x80)
//前一个字符是英文字符
LcdWriteData(0x20);
if((addr != LcdReadAddr()) &&
//写入的是行最后位的后半字则换行
(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))
ChangeNextRow();
changeRowFlag = 1;
LcdWriteData(ch);
if((addr != LcdReadAddr()) &&
//写入的是行最后位的后半字则换行,且未换过行
(changeRowFlag == 0) &&
(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))
ChangeNextRow();
return (ch);
前后半字判断方法如下:读液晶地址,向液晶写入一个空格,再读地址,两地址相同则是前半字,不同则是后半字。读地址函数在Lcd12864.c中,新加入函数,代码如下:
char LcdReadAddr()
WaitForEnable();
DATA_DIR_IN;
ch = DATA_IN;
DATA_DIR_OUT;
return (ch|0x80);
这个是读地址,ch|0x80是因为写入液晶地址首位应为1.。
液晶中新加入两个函数,一个是上边的读地址,另外一个是读数据;作用是读取液晶当前地址处的数据,从而判断之前半字是否是中文。代码如下:
char LcdReadData()
WaitForEnable();
DATA_DIR_IN;
ch = DATA_IN;
DATA_DIR_OUT;
另外 putchar还调用了换行——ChangeNextRow函数,完成液晶输出换至下一行。
代码如下:
void ChangeNextRow()
addr = LcdReadAddr();
//当前地址
if(addr &= 0x88)
LcdWriteComm(0x90);
else if(addr &= 0x90)
LcdWriteComm(0x98);
else if(addr &= 0x98)
LcdWriteComm(0x88);
AddNewline();
//添加行,同时向上滚动
LcdWriteComm(0x98);
读取当前地址,判断在哪一行,然后写入下一行首地址;如果是最后一行,则所有安徽那个向上移,写入最后一行首地址。
AddNewLine函数完成所有行向上滚动一行,然后地址定位至最后一行。
代码如下:
void AddNewline()
char str[17];
str[16] = 0;
//第二行 移至第一行
LcdWriteComm(0x90);
LcdReadData();
for(int i = 0;i&16;i++)
str[i] = LcdReadData();
LcdWriteString(0x80,str);
//第三行 移至第二行
LcdWriteComm(0x88);
LcdReadData();
for(int i = 0;i&16;i++)
str[i] = LcdReadData();
LcdWriteString(0x90,str);
//第四行 移至第三行
LcdWriteComm(0x98);
LcdReadData();
for(int i = 0;i&16;i++)
str[i] = LcdReadData();
LcdWriteString(0x88,str);
//第四行 空白
LcdWriteString(0x98,&
//十六个空格
读出下一行数据,写入上一行,最后一行写入空格即可。
到此putchar函数全部完成,printf移植的程序部分完成,使用方法详见使用示例。
scanf和printf类似,其只负责格式化输入的字符,字符来源是从getchar函数获取;同样,在使用scanf函数之前,要针对字符输入源自行编写getchar函数
最简getchar:
int getchar()
return (putchar(UartReadChar()));
这是最简单的getchar函数,直接调用读取字符函数,输出并返回。
但是人的输入过程会偶尔犯错误的,为了支持退格键等,需要开辟一个缓存区。
详细代码如下:
#define LINE_LENGTH 80
//行缓冲区大小,决定每行最多输入的字符数
/*标准终端设备中,特殊ASCII码定义,请勿修改*/
#define InBACKSP 0x08
#define InDELETE 0x7F
//ASCII &DEL& (DEL 键)
#define InEOL '\r'
//ASCII &CR&
#define InSKIP '\3'
//ASCII control-C
#define InEOF '\x1A'
//ASCII control-Z
#define OutDELETE &\x8 \x8&
//VT100 backspace and clear
#define OutSKIP &^C\n&
//^C and new line
#define OutEOF &^Z&
//^Z and return EOF
int getchar()
static char inBuffer[LINE_LENGTH + 2];
//Where to put chars
static char
//Pointer in buffer
if(inBuffer[ptr])
//如果缓冲区有字符
return (inBuffer[ptr++]);
//则逐个返回字符
//直到发送完毕,缓冲区指针归零
//缓冲区没有字符,则等待字符输入
c = UartReadChar();
//等待接收一个字符
if(c == InEOF && !ptr)
//只有在未入其他字符时才有效
printf(OutEOF);
//终端显示EOF符
return EOF;
//返回 EOF(-1)
if(c==InDELETE || c==InBACKSP)
//==退格或删除键==
//缓冲区有值
//从缓冲区移除一个字符
printf(OutDELETE);
//同时显示也删掉一个字符
else if(c == InSKIP)
//==取消键 Ctrl+C ==
printf(OutSKIP);
//终端显示跳至下一行
ptr = LINE_LENGTH + 1;
//==0 结束符==
else if(c == InEOL)
//== '\r' 回车==
putchar(inBuffer[ptr++] = '\n');//终端换行
inBuffer[ptr] = 0;
//末尾添加结束符(NULL)
//指针清空
else if(ptr & LINE_LENGTH)
//== 正常字符 ==
if(c &= ' ')
//删除 0x20以下字符
//存入缓冲区
putchar(inBuffer[ptr++] = c);
//缓冲区已满
putchar('\7');
//== 0x07 蜂鸣符,PC回响一声
注释已经很详细了,这里不再详细解释。
scanf的移植程序部分已经完成,如果需要从键盘读入字符,可以仿照上述函数写getchar函数。具体使用和设置见使用示例。
另外,iar的安装文件夹下,430文件夹下有一个src文件夹,lib/clib文件夹下(我的具体文件夹是:D:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\clib\getchar.c),有一个getchar.c文件,这是getchar的函数,内容如下:
#include &stdio.h&
extern char _low_level_get(void);
/* Read one char from I/O */
/* Should be supplied by user */
static void put_message(char *s)
while (*s)
putchar(*s++);
#define LINE_LENGTH 80
/* Change if you need */
#define In_DELETE 0x7F
/* ASCII &DEL& */
#define In_EOL '\r'
/* ASCII &CR& */
#define In_SKIP '\3'
/* ASCII control-C */
#define In_EOF '\x1A'
/* ASCII control-Z */
#define Out_DELETE &\x8 \x8&
/* VT100 backspace and clear */
#define Out_SKIP &^C\n&
/* ^C and new line */
#define Out_EOF &^Z&
/* ^Z and return EOF */
int getchar(void)
static char io_buffer[LINE_LENGTH + 2];
/* Where to put chars */
static int
/* Pointer in buffer */
if (io_buffer[ptr])
return (io_buffer[ptr++]);
if ((c = _low_level_get()) == In_EOF && !ptr)
put_message(Out_EOF);
return EOF;
if (c == In_DELETE)
put_message(Out_DELETE);
else if (c == In_SKIP)
put_message(Out_SKIP);
ptr = LINE_LENGTH + 1;
/* Where there always is a zero... */
else if (c == In_EOL)
putchar(io_buffer[ptr++] = '\n');
io_buffer[ptr] = 0;
else if (ptr & LINE_LENGTH)
if (c &= ' ')
putchar(io_buffer[ptr++] = c);
putchar('\7');
_low_level_get(void); 这个函数需用户定义,不过这个getchar函数不支持退格键,可以更改以支持;_low_level_get(void);这个函数可以直接调用UartReadChar();这个函数,使用时,把getchar.c加入项目,同时在项目中添加_low_level_get(void);函数,函数体只有一句:return UartReadChar();即可。
程序调用示例:
程序使用方式,项目中添加printf.c文件和scanf.c文件(用printf函数则加printf.c文件,用scanf函数就添加scanf.c文件),在要使用函数的地方包含stdio.h(编译器自带库——标准输入输出库)
还要设置使用库和printf的大小:
如果不进行这项设置,使用scanf时将报错:
Error[e27]: Entry &getchar& in module Scanf ( G:\work\程序库\Printf\Debug\Obj\Scanf.r43 ) redefined in module ?getchar ( D:\Program Files\IAR Systems\Embedded;用的是C语言,这里选择CLIB。
然后设置库选项:
这里选择大尺寸,目的是支持所有的格式,因为所用单片机有64kb的程序存储空间,足够使用,如果程序存储空间不够大,推荐选择中尺寸或小尺寸。大尺寸printf占用空间 4.8kb、scanf :2.3kb,中尺寸 printf:2.5kb、scanf:1.6kb,小尺寸 printf:1.6kb。实际使用时根据需要进行选择。
同时要加入Lcd12864的使用(c文件,h文件(要调用lcd12864的初始化函数))Uart和液晶一样要调用初始化函数。
#include &msp430x16x.h&
#include &stdio.h&
#include &Uart.h&
#include &Lcd12864.h&
头文件包含。
void main( void )
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ClkInit();
LcdInit();
UartInit(38400,'n',8,1);//串口初始化,设置成38400bps,无校验,8位数据,1位停止
//scanf(&%d&,&a);
//printf(&刘中原%d\n&,a);
printf(&刘中原%f\n&,23.6);
printf(&刘中原%1.2f\n&,23.6);
使用时,先调用液晶和串口的初始化函数,然后开中断;就可以正常的调用scanf和printf函数了。
至此,printf和scanf的移植全部完成,使用这两个函数将给单片机的输入输出带来极大方便。另外,Lcd12864的液晶使用是4行显示,空间较小,可能需要定位至具体位置,以使界面看起来更合理,为此,在Printf中再添加一个定位函数(GotoXY):
void GotoXY(char x,char y)
addr = 0x80 + x / 2;
else if(y==1)
addr = 0x90 + x / 2;
else if(y==2)
addr = 0x88 + x / 2;
addr = 0x98 + x / 2;
LcdWriteComm(addr);
//是奇数,后移一位(写入空格)
LcdWriteData(0x20);
这样就方便了液晶程序的编写。
又加入一个函数,在printf.c里,目的是支持退格键,内容如下:
void BackSpace()
char addr,
addr = LcdReadAddr();
//当前地址
LcdWriteData(0x20);
//写入一个空字符,根据地址判断是否为前半字
if(addr == LcdReadAddr())
if(addr == 0x80)
else if(addr == 0x90)
addr = 0x87;
else if(addr == 0x88)
addr = 0x97;
else if(addr == 0x98)
addr = 0x8F;
addr = addr - 1;
LcdWriteComm(addr);
LcdReadData();
dat = LcdReadData();
LcdWriteComm(addr);
if(dat & 0x80)
LcdWriteData(dat);
LcdWriteComm(addr);
退格完成功能:仅仅地址向前退一格,详细见源程序。
printf和scanf移植全部完成,欢迎大家使用;有什么不足之处,欢迎提出意见或是建议;多谢大家支持啦。
本文版权归作者和博客园共有,欢迎转载,转载保留此段文字并且注明出处;谢谢。
阅读(...) 评论()

我要回帖

更多关于 scanf s函数 的文章

 

随机推荐