博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scanf函数
阅读量:5110 次
发布时间:2019-06-13

本文共 836 字,大约阅读时间需要 2 分钟。

 今天试着以递归的方式用C写了个斐波那契数列,最后我想通过scanf函数从控制台中输入一个整形数,输入出该整形数据对应的结果是多少.

其中是这么定义的  :  int nu  = scanf("%d",&nu);

控制台输入一个整形数3,回车后,程序进入了死循环。调试输出后发现输入3后,nu的值为1,试着输入其他的整形数nu还是1。

于是我将代码改了一下  int nu; scanf("%d",&nu); 在控制输入3后,打印输出的nu为3     -- 这才是我想要的结果. 但为什么会这样呢?

  解释第一个: 按JAVA的理解应该是scanf从控制台得到输入的值,然后再赋值给nu才是.    经过网上查询后,终于知道为什么了,因为scanf的返回值是将匹配成功的个数返回.  也就是说当时我输入的是3,scanf用%d去匹配并读入文件,只匹配到一个并且读入文件的也只有一个所以返回是1,nu接收到这个值也就是1。

  解释第二个:&nu中的&是地址运算符,&nu指nu在内存中的地址,scanf通过地址将nu存入到变量nu中。所以输出的nu 为控制台输入的值。

  总结下来就是scanf的赋值与返回值的问题.

 如果改成: int nu,nu1,nu2;

      nu1 = scanf("%d",&nu);

printf("nu=%d   nu1=%d\n",nu,nu1);

  nu1 = scanf("%d,%d",&nu,&nu2); (输入时用,号隔开)

printf("nu=%d   nu1=%d\n",nu,nu1);   这样就会更加明白scanf的返回值和赋值是怎么一回事了.

//    关于输入与输出 

输入: scanf();  输入的字符串不能有空格      gets();   可以有空格

输出:printf(“%s”,str);        puts(str);  输出时自动换行

 

 

 

 

转载于:https://www.cnblogs.com/a-really/p/3221670.html

你可能感兴趣的文章
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
WPF中实现多选ComboBox控件
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
关于TFS2010使用常见问题
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
ionic2+ 基础
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
Screening technology proved cost effective deal
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
【2.2】创建博客文章模型
查看>>
从零开始系列之vue全家桶(1)安装前期准备nodejs+cnpm+webpack+vue-cli+vue-router
查看>>
Jsp抓取页面内容
查看>>
大三上学期软件工程作业之点餐系统(网页版)的一些心得
查看>>