今天在使用scanf时,发现不能正确地输入一个带空格的字符串,搜索了一下,原来scanf不能用于获取带不确定数目空格的字符串,因为空格,换行和制表符都是用于分割输入的分割符号。
一. scanf 返回值
scanf()函数执行成功后的返回值是成功读取的变量数,也就是说,这个scanf()函数有n个变量,如果scanf()函数全部正常读取,它就返回n。scanf()函数执行成功意味着:用户输入的数据类型与scanf()函数的变量类型匹配,且个数一致,如scanf(“%d”, &a);用户输入的是整数6,则scanf()函数执行成功,返回值为1,即scanf("%d",
&a) == 1
。熟悉这一点,就可以用于验证用户输入的正确性。以下是一个示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include
<stdio.h>intmain (){inta =123;printf("输入一个整数:\n");
while(scanf("%d",&a)!=1)/*输入的是非法值,则要求用户重新输入*/ {/*直到用户输入合法值为止*/printf("错误,重新输入:\n");setbuf(stdin ,NULL );
/*清空键盘缓冲区,清楚上次错误输入的数据*/}printf("a
= %d",a );return0;}
|
运行结果1:
输入一个整数:
6 (回车)
a = 6
运行结果2:
输入一个整数:
k (回车)
错误,重新输入:
6 (回车)
a = 6
二. 用scanf()输入多个字符串
一定要注意:用scanf()输入多个字符串时一定要注意分隔符问题。如scanf("%s,%s",
p1, p2);
如果你输入abcd,efgh 事实上p1等于abcd,efgh而不是abcd,而p2是乱码,这时候scanf("%s,%s",
p1, p2);
的返回值是 1 ,而不是2。输入多个字符串是,使用用空格、n和t作为分隔符都是正确的,如果你输入的字符串包含空格,则要用gets(),不要用scanf。以下是几个正确的范例:
1
2
3
|
scanf("%s\n%s",p1 ,p2 );/*
输完p1,然后Enter,接着输入p2 */scanf("%s
%s",p1 ,p2 );/*
输入时用空格隔开 */scanf("%s\t%s",p1 ,p2 );/*
输入时用Tab隔开 */
|
三. 清屏函数
使用system(“CLS”)函数可以清除程序运行窗口中所有内容,即在system(“CLS”)函数之前输出的所有内容都将被删除。这个函数对于命令行的程序的相当有用的(个人观点),可以实现程序界面的简洁性。但是system(“CLS”)函数在Linux平台的GCC中是无法识别的,那就换做system(“clear”),可以实现相同的功能。
四. system("pause")和getchar()
有时候程序运行只是一闪而过,看不到运行结果,这时system(“pause”)和getchar()就起作用了。system(“pause”)是程序运行到该函数就暂停运行了,按任意键可以继续运行system(“pause”)函数之后的代码,程序暂停的时候,你就可以看到之前的输出结果了;getchar()一般用于获得从键盘输入的字符,如果是单纯的一条语句getchar();就表示等待用户输入字符,这也起到暂停程序运行的功能,跟system(“pause”)的功能大同小异,按任意键后就可以继续运行getchar();之后的代码了。注意:system(“pause”)在Linux平台的GCC中是无法使用。
五. C语言是没有引用的
关于什么是引用,可以看看这两个网页的介绍:
谈谈
C++ 的引用
深入探讨C++中的引用
之前编写了个C语言程序,保存为.c文件始终没法通过编译,结果换成.cpp居然通过编译了。不懂其中奥妙,上CSDN提问:我用的纯C编写的程序,为什么要用.cpp文件才能通过编译呢?结果引来一顿痛批:"被忽悠了,这也能叫纯C" ,"c语言里面没有引用的^_^,&只能用来取地址"。才知道我的程序里面用了C++机制的引用,C和C++都学了,没学精搞混了,而且严蔚敏吴伟民所谓的C语言版数据结构书上也使用了引用,我就当C来使了,我也被忽悠了。
分享到:
相关推荐
不过,关于DDOS攻击和论坛资源分享社区的信息,仍然可以提炼出以下几点知识点: 1. DDOS攻击:分布式拒绝服务攻击(Distributed Denial of Service),指通过控制多台受感染的计算机同时向目标服务器发送大量请求,...
在"嵌入式系统高级C语言编程"中,你可能会学到以下几个关键知识点: 1. **内存管理**:嵌入式系统通常资源有限,因此理解和掌握内存管理至关重要。书中可能包括堆栈、静态与动态内存分配、内存泄漏检测以及如何优化...
本资源摘要信息是根据《趣味C语言编程100例.pdf》一书中的四个程序生成的知识点。 程序1:组合三位数 在第一个程序中,我们学习了如何使用C语言编程来解决一个组合问题。问题是:有1、2、3、4四个数字,能组成多少...
学习这些实例时,需要注意以下几点: 1. **理解基本概念**:熟悉C语言的基本语法和数据类型,理解单片机的内存模型和I/O端口操作。 2. **动手实践**:实际编写和调试代码,观察代码运行结果,理解单片机的运行机制。...
C语言编程的核心知识点主要包括以下几个方面: 1. **基本语法**:C语言的语法简洁明了,包括变量声明、常量定义、数据类型(如int、char、float等)、运算符(如算术、比较、逻辑、位操作符)以及流程控制语句(if-...
本资料集“STC15增强型8051单片机C语言编程与应用”主要涵盖了以下几个关键知识点: 1. **STC15单片机概述**:STC15系列单片机具有高速运算能力、低功耗特性、内部集成Flash存储器、丰富的I/O接口、以及增强的...
林锐博士在书中可能会涵盖以下几个关键知识点: 1. **基本语法与规范**:C语言的基础语法是学习的起点,包括变量定义、数据类型、运算符、控制结构(如if、for、while)等。林博士会强调遵循标准C的编程规范,避免...
C语言在51单片机上的应用,主要涉及以下几个核心知识点: 1. **C语言基础知识**:学习51单片机C语言编程前,需要了解C语言的基本语法,包括变量、常量、运算符、流程控制语句(如if、switch、for、while等)、函数...
在学习单片机C语言编程时,有几个关键知识点: 1. **嵌入式C语言特性**:理解C语言在单片机环境下的特殊性,比如存储模型、位操作、中断服务函数等。 2. **数据类型和变量**:根据单片机的字长和存储空间选择合适的...
在探讨“ARM嵌入式系统C语言编程”的过程中,我们首先需要理解ARM架构与嵌入式系统的概念,以及为何C语言成为了这一领域的首选编程语言。 ### ARM架构 ARM(Advanced RISC Machines)是一种基于精简指令集计算...
在C语言编程宝典中,你可能会找到以下几个关键知识点: 1. **C语言基础**:涵盖C语言的基本语法,包括变量声明、数据类型(如整型、浮点型、字符型等)、运算符、流程控制(如if-else、switch-case、循环结构for、...
本教程可能涵盖了以下几个核心知识点: 1. **C语言基础**:包括数据类型(如整型、浮点型、字符型)、变量、常量、运算符和表达式,以及流程控制语句(如if-else、switch、for、while循环)。 2. **函数**:C语言...
因此,无法从这些文件名中生成关于C语言编程的知识点。 然而,关于C语言编程本身,我可以提供一些基础和重要的知识点: C语言是一种强大的、结构化的、过程式的编程语言,由Dennis Ritchie在1972年开发,最初用于...
课程的配套资料《黑客基地:C语言编程特训班特训3.ppt》很可能包含了详细的课件,包括讲解内容、实例代码、习题解析等,帮助学员全面理解和掌握上述知识点。学习过程中,结合实际动手操作和不断的练习,将有助于深入...
C语言是一种广泛使用的计算机编程语言,它具有高效、灵活、功能强大的特点。在《C语言经典编程实例100题+答案》中,...通过对这些实例的学习和练习,可以加深对C语言编程概念的理解,并为解决实际问题打下良好的基础。
在“C语言进阶——嵌入式系统高级C语言编程”这个主题中,我们可以预期涵盖以下几个关键知识点: 1. **指针与内存管理**:在嵌入式系统中,理解和熟练使用指针是至关重要的。这包括指针运算、指针作为函数参数、...
在实际编程过程中,编写PIC单片机的C语言程序通常会涉及以下几点: - **包含必要的头文件**:如`pic.h`,用于定义特定于单片机的寄存器和配置项。 - **配置单片机**:通过`__CONFIG`宏定义配置字,比如时钟频率、...
C语言编程规范 C语言编程规范是指在编写C语言程序时需要遵守的规则和惯例,以确保代码的可读性、可维护性和可扩展性。本文将详细介绍C语言编程规范的各个方面。 1. 头文件编码规范 在C语言编程中,头文件 plays a...