不怎么重要的前言
上一篇我们介绍了输出的函式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;}
输出结果:
在我们输入数字5之后:
scanf的使用
这次读取使用者输入时,我们一样要结合第六篇的变数、第七篇的格式,然后在变数之前记得加上「&」,情况大概有以下的:
取得单一变数之值(1) 整数
#include <stdio.h>int main(){ int data; printf("plz input a int: "); scanf("%d", &data); printf("your data: %d\n", data); return 0;}
(2) 浮点数
#include <stdio.h>int main(){ float data; printf("plz input a float: "); scanf("%f", &data); printf("your data: %f\n", data); return 0;}
(3) 字元
#include <stdio.h>int main(){ char data; printf("plz input a char: "); scanf("%c", &data); printf("your data: %c\n", data); return 0;}
(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;}
(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;}
(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;}
(可以看到分开读取跟一起读取看起来没什么差别,是因为scanf的预设分割符号就是空白键,只要遇到空白键scanf就会预设他已经是下一个读取的输入了,所以用enter键跟空白键来分开输入的结果都会是一样的。)
以特定格式取得不同变数(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;}
(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;}