大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
scanf()函数基础扩充:
C函数库包含了多个输入函数,其中最常用的差不多就是scanf()了,它可以读取各种格式的输入。
scanf()可以把输入的字符串转换成我们想要的各种形式,整数、浮点数、字符串等等,它是printf()的逆过程。和printf()一样都有控制字符串和参数列表,不同的是scanf()的参数列表是指向变量的指针。
#include <stdio.h> int main() { int age; float height; char address[30]; printf("enter your age\n"); scanf("%d",&age); printf("enter your height\n"); scanf("%f",&height); printf("enter your address\n"); scanf("%s",address); printf("age : %d height: %f address: %s\n",age,height,address); }
上述程序用scanf()完成了一个简单的提示输入交互功能。
int age; float height; char address[30]; scanf("%d",&age); scanf("%f",&height); scanf("%s",address);
可以看到第三个scanf的参数和第一二个的参数长得不太一样,第一二个用了取地址符&,第三个没有。然而它们都是指向相应变量的指针,对于指向int、float型的指针,用变量名取地址,也就是上面的&age 和 &height;对于数组,数组名便是指向它的指针,如上面的 address。
scanf()要求传递的是变量的指针,因为我们的输入要存储到这些变量中,也就是要在函数中改变这些变量的值,传递指针才能修改参数变量的值,这里感觉有点像用一个函数交换两个数的值参数要传指针那样的情况。如果传递的不是指向对应变量的指针,那么程序很可能崩溃。
从scanf()的角度看输入:
假定我们使用了一个%d说明符来读取一个整数。
scanf()开始每次读取一个输入字符,且跳过空白字符(空格、tab、换行符)直到遇到第一个非空白字符,它试图读取一个整数,所以如果遇到输入字符为一个数字或者一个符号(+和-)则把该字符保存并继续下一个字符的读取,直到它遇到一个非数字的字符,就可以得出结论已经读到了整数的尾部,这时scanf()把这个非数字的字符放回输入。这意味着当程序进行下一次开始读取输入时,它将从前面被放回输入的那个非数字字符开始。
最后scanf()计算读取到的输入的相应数值,并将该值存放到相应变量中。
scanf()的返回值:
scanf()函数返回成功读入的项目的个数,如果没有读取任何项目(当期望读取到数字,而输入的是飞数字字符)则返回0。当检测到文件末尾时,会返回EOF(end of file),EOF是在文件
stdio.h中定义的特殊值,一般 #define为-1。
scanf()的返回值可以有如下程序等应用:
//输入为数字则进行处理,否则退出循环 while(1==scanf("%d",&num)) { //do something... } //跳过输入的整数 while(1==scanf("%d",&num)) ;
参考:C primer plus
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168112.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...