【从零开始的 C 语言笔记】第九篇-scanf 介绍 & 结合printf的应用 (1)

不怎麽重要的前言

上一篇我们介绍了输出的函式printf,大家应该对於列印结果可以自由应用了吧?

接下来我们介绍与之搭配的输入函式scanf吧!


取得使用者输入?

大家学到现在有没有开始想一件事呢,写程序的目的其实是为了解决问题,那麽处理资料时除了最後要输出结果,还有一个重要的事情应该是要取得使用者输入,我们才能在程序中弹性的处理资料,来解决某些麻烦吧!

今天我们来介绍一个用来读取使用者输入的函式--「scanf();」!

按照老惯例我们先来看一段程序码:

#include <stdio.h>

int main(){
    int data;

    printf("plz input a number: ");
    scanf("%d", &data);

    printf("your data is %d.\n", data);
    printf("the result of (data + 10) is %d.\n", data+10);

    return 0;
}

输出结果:
https://ithelp.ithome.com.tw/upload/images/20211026/20142565N5njA3WHar.png

在我们输入数字5之後:
https://ithelp.ithome.com.tw/upload/images/20211026/20142565Qnj7591qCH.png


scanf的使用

这次读取使用者输入时,我们一样要结合第六篇的变数、第七篇的格式,然後在变数之前记得加上「&」,情况大概有以下的:

  1. 取得单一变数之值
    (1) 整数
#include <stdio.h>

int main(){
    int data;
    printf("plz input a int: ");
    scanf("%d", &data);
    
    printf("your data: %d\n", data);
    
    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565qGWx2JkM2U.png

(2) 浮点数

#include <stdio.h>

int main(){
    float data;
    printf("plz input a float: ");
    scanf("%f", &data);

    printf("your data: %f\n", data);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/201425659Z9xRaQ6Eh.png

(3) 字元

#include <stdio.h>

int main(){
    char data;
    printf("plz input a char: ");
    scanf("%c", &data);

    printf("your data: %c\n", data);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565mjXfwqOTMd.png

(4) 字串(之後会提到字串这个特别的资料类型)

#include <stdio.h>

int main(){
    char data[20];
    printf("plz input a str: ");
    scanf("%s", &data);

    printf("your data: %s\n", data);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565fqNzD9hQAy.png

  1. 取得多个变数之值
    (1) 分开读取
#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input 3 int: ");
    scanf("%d", &data1);
    scanf("%d", &data2);
    scanf("%d", &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565wseYCCd0Cz.png

(2) 一次读取

#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input 3 int: ");
    scanf("%d%d%d", &data1, &data2, &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/201425655V4t9AH4OZ.png

(可以看到分开读取跟一起读取看起来没什麽差别,是因为scanf的预设分割符号就是空白键,只要遇到空白键scanf就会预设他已经是下一个读取的输入了,所以用enter键跟空白键来分开输入的结果都会是一样的。)

  1. 以特定格式取得不同变数
    (1) 空白键(等同楼上的2-(2),因为预设就是空白键分割)
#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input 3 int: ");
    scanf("%d %d %d", &data1, &data2, &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565cZwITP8L8M.png

(2) 特殊符号分割

#include <stdio.h>

int main(){
    int data1, data2, data3;
    printf("plz input a Year-Month-Day: ");
    scanf("%d-%d-%d", &data1, &data2, &data3);

    printf("your data: %d %d %d\n", data1, data2, data3);

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211027/20142565KFxrpzhfuq.png


看到这里就介绍完scanf的大致语法了,也同时放了很多范例code可以让大家测试看看,不过printf与scanf的用法上,因为它们的语法过於类似了,想必大家会有一点小混乱吧?

所以下一篇我们来分析一下printf与scanf的差别,再来帮scanf做个小结吧,然後有个小作业可以做做看喔!


<<:  国际电子表单及文件管理系统

>>:  Vue3 ( JsES6、this、指令、OptionAPI ) -1

Day14-"字串"

在C语言里,字串就是字元的一维阵列,且这个字元阵列有一结尾符号「\0」我们称之为空字元,则这个字串称...

Kaggle机器学习进阶课程总结:

课程主要是在於更好的优化data transform的时候data本身的优化处理: Permutat...

Day5 - numpy(4)ndarray的运算及全域函式

ndarray的运算: 相同大小的阵列之间进行运算,称作为 向量化 意味着同时对整批的资料一起做运算...

卡夫卡的藏书阁【Book16】- Kafka - KafkaJS 生产者 - 4

“It's only because of their stupidity that they'r...

[Day14] 团队管理:建立团队信赖感(3)

有意义的讨论 层层拆解,找到歧异点 讨论过程里面,我们通常容易跳到结论做为起点,而我们通常也会先看到...