黑马程序员-C学习笔记之scanf

---------------------- IOS开发Android培训、期待与您交流!
----------------------

一、scanf函数介绍

这也是在stdio.h中声明的一个函数,因此使用前必须加入#include<stdio.h>。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量。

函数原型为:int scanf(const char*format,...);

二、scanf用法

  #import <stdio.h>

    int main()
    {
    int age;

    // 接收输入的值赋给age age2
    scanf("%d", &age);

    printf("age=%d\n", age);
    return 0;

    } 

这里从键盘接收一个整形数存放到变量age中。当接收多个数时,可以这样用:

    #import <stdio.h>

    int main()
    {
    int age;

    // 接收输入的值赋给age age2
    scanf("%d", &age);

    printf("age=%d\n", age);
    return 0;

    } 

这里要注意的是,在输入时可以输入一个数回车后再输入一个数,也可以输入一个数空格再输入另一个数回车。但是如果是这样的又不一样,

scanf("%d,%d",
&age, &age2);

scanf中的两个格式化参数是用逗号隔开的,所有同时输入两个数就要用逗号分隔而不再是空格,你可能注意到规律了,scanf中格式化参数是用什么分隔的在输入数时,要一次回车输入的话就要用什么分隔。

对字符的用法也同样适用。

    char a;
    scanf("%c",&a);

    printf("a=%c", a); 

接收一个字符,存放到字符变量a中,同时输入多个字符也适用上面的用法。

三、字符串的接收

从键盘输入的字符串放到指定数组中如下:

    // 字符串数组
    char str[10];
    // 接收字符串
    scanf("%s", str);  

注意:这里的的str不用加取地址符,数组名代表着地址,当输入字符串时不能有空格,否则会出现下图结果。

可以看到,空格和空格以后的字符串都不会被接收,因为scanf函数在遇到空格或回车时会返回。看看下面的你也许就明白了:

    // 字符串数组
    char str[10];
    char str2[10];
    // 接收字符串
    scanf("%s %s", str, str2);
    printf("%s\n%s", str, str2); 

scanf在两个参数中间是空格分隔的,遇到第一个空格就返回把空格前面的字符串存放到str中,再把空格后面的字符串存放到str2中。

那么按小桥的说法是不是用scanf接收字符串就不能包含空格了呢?但是有时一个字符串中确实有空格,答案是否定的,因为scanf的高级功能可以解决这个问题。

四、%[]格式控制符

scanf的%[]格式控制符能够控制函数什么时候返回。如:

    scanf("%s", str); // 接收的字符串中没有空格
    scanf("%[^\n]", str2); // 接收包含空格的字符串

第二句和第一句的格式化参数不同,什么意思呢?%[^\n]表示的是除了\n符外,接收所有字符,也就是函数遇到回车才返回 ^是取反的意思。同样输入 i love oc! 结果如下:

更多 %[] 的信息,读者可以自行查找资料

---------------------- IOS开发Android培训、期待与您交流!
---------------------- 详细请查看:www.itheima.com 

黑马程序员-C学习笔记之scanf

时间: 2024-12-28 14:40:27

黑马程序员-C学习笔记之scanf的相关文章

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类 1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等 2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加* 3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变 4.NSArray数组和子类NSMutableArray的基本操作: 1>使用NS

黑马程序员_OC学习笔记之description方法和sel

OC--description方法 1.Description方法包括类方法和对象方法.(NSObject类所包含) -description(对象方法) 2.使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 3.使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 4.使用@%打印对象如(“@%”,P)默认打印输出为<

黑马程序员_OC学习笔记之@property和@synthesize

[objc] view plaincopyprint? <span style="font-size:24px;">#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int age; int _height; int height; int _weight; int weight; int _money; int money; } @property int ag

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-C学习笔记之预处理指令

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.什么是预处理指令 预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包含,条件编译. 预处理指令一般以 # 号开头,可以出现在文件的任何地方,作用于整个文件. 二.宏定义 宏定义分不带参数的和带参数的宏定义.     1?不带参数的宏定义 #import <stdio.h> #define AGE 10 // 宏名用大写 int ma

黑马程序员-OC学习笔记之NSString与NSMutableString

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSString与NSMutableString 相信大家对NSString类都不陌生,它是OC中提供的字符串类,它的对象中的字符串都是不可变的,而它的子类NSMutableString类的对象中的字符串就是可变的.什么是可变与不可变呢?二者的区别就是在已经创建的一个字符串对象中,在程序中能不能更改字符串,比如拼接新的字符串,可变的可以在原字符串中更改,