C语言中scanf的一些问题

关于scanf的问题:

分别调用13行14行结果如下:

原因是,scanf是一个从输入流读取字符并且格式化转换的函数,13行的输入格式因为没有给定字符串的长度,因此将空格也作为字符串的内容一起读取了。然而,空字符被当作了字符串的结尾,读取停止,这个空白字符被当作对b的输入,所以b是空格,d显示出来是hell。

当以14行的方法输入时,这时的空格被当作输入 格式被读取(跳过),转而继续读取后面的字符。

对于int型+char变量使用13行方式可以正确显示,因为%d将输入解释为十进制数,遇到空字符停止,将其他输入当作字符读入。

对于int+int以16行的方式输入时必须使用空字符隔开来读入两个数,而且对于除数字及空字符之外的其他字符都解释为0.

时间: 2024-11-11 06:11:13

C语言中scanf的一些问题的相关文章

c语言中scanf()、printf()函数

函数调用scanf(“%d”,  &weight) 包含两个参数:“%d” 和&weight.C用逗号来隔开函数调用中的多个参数: 但是printf()和scanf()函数比较特殊,其函数数目可以不受控制. 例如,我们可以使用1个.2个.3个甚至4个参数调用printf()函数.而程序需要知道参数的数目才能正常工作,这两个函数通过第一个参数确定后续参数的个数,方法是第一个参数字符串中的每个说明符对应了后面的一个参数. 以下语句包含两个格式说明符:%d 和%d printf(“%d cats

浅谈C语言中scanf(),gets(),getchar()函数区别与联系

众所周知,scanf函数和gets函数是从键盘输入数据的函数.其基本函数功能这里不做过多赘述,只对两个函数易错点深入分析. int main() { char a[20]; char b[20]; char c[20]; printf("请输入a字符串\n"); scanf("%s",&a); printf("请输入b字符串\n"); gets(b); printf("请输入c字符串\n"); gets(c); ret

关于c语言中scanf的输入的问题

下面有一个代码为例,要求输入姓名跟居住地 #include <stdio.h> #include <windows.h> #define MAX_NAME_LEN 5 #define MAX_PLACE_LEN 5 int main(void){ char name[MAX_NAME_LEN]; char place[MAX_PLACE_LEN]; printf("请输入你的姓名:"); scanf("%s",name); printf(&q

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷

总结1:ubuntu14.04上的apache2.4.7默认没有cgi模块,而ubuntu10.04是的apache2.2.14默认是有的. 起因:每次都用ubuntu14.04上的VBox里运行的ubuntu10.04上的apache2,感觉略麻烦,于是直接在ubuntu14.04上装个apache2. 发现/cgi-bin/里的cgi总是404,反复确认配置目录没错. 怀疑权限问题(但一般会是5XX而不是404),最后无果. 搜索多次,资料不多,最后找到线索和答案,就是默认不支持了,对于开源

C语言中的sizeof中的数组和指针

1.引子 今日在看动态规划的0-1背包问题,看完后还是打算自己写着试试,毕竟实践才能出真知嘛.动态规划的结果是个二维数组dp,我copy书上的例子进行初始 memset(dp,0,sizeof(dp)),考虑到程序的健壮性,对于数组我都是用的动态申请,自然二维数组也不例外[动态二维数组的建立可参见本blog的延伸]. 程序写完后,但是却不能运行,开始单步调试,当进行到dp的赋值时老是报指针的错误!!!开始我以为是指针越界什么的,仔细才发现dp的数组维数确实要多申请一个用来存放初始情况的值(全是0

C语言中setjmp与longjmp学习笔记

一.基础介绍 ?? ?头文件:#include<setjmp.h> ?? ?原型:??int?setjmp(jmp_buf envbuf) ?? ?宏函数setjmp()在缓冲区envbuf中保存系统堆栈里的内容,供longjmp()以后使用.首次调用setjmp()宏时,返回值为0,然而longjmp()把一个变原传递给setjmp(),该值(恒不为0)就是调用longjmp()后出现的setjmp()的值. void longjmp(jmp_buf envbuf,int status);

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

GO语言中import的规则和用法

GO语言中引入包使用import,我将在本文讲解下规则和用法. 一些规则: 1.包中不能有main方法. 2.同文件夹中可以直接用方法名调用. 3.main函数建议放在package main里4.main不能调用同个目录下的其它文件中的方法. 5.还可以把包放在上级的目录中,如: /src/myFolder/foo/bar1.go #package foo /src/myFolder/foo/bar2.go #package foo /src/myFolder/foo/bar3.go #pac

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内