C Primer Plus中第六章代码示例scanf作用

C Primer Plus 第五版第六章讲述C控制语句:循环时,有一个关于scanf的程序实例,其中有一行scanf语句。该示例强调了scanf的两种不同作用
①.接收键盘输入值
②.返回成功获取的值的个数
程序清单如下:

#include<stdio.h>
int main(void){
    long num;
    long sum = 0L;
    int status;
    
    printf("Please enter an integer to be summed.");
    printf("(q to quit ):");   /*第五版书中双引号内少输入一个左括号*/
    status = scanf("%ld",&num);  /*scanf接收前面讨论过的某种变量的值时在变量前加入&*/
    while(status == 1) {
    sum = sum + num;
    printf("Please enter next integer (q to quit):");
    status = scanf("%ld",&num);
    }
    printf("Those integers sum to %ld.\n",sum);
    return 0;
    }

代码第九行中其实可以分为两行,首先第一行是执行scanf的接收键盘输入的作用,即scanf("%ld",&num);此时接收的是我们输入的值,然后第二行应为status = scanf("%ld",&num);即由scanf()获取成功接收键盘输入的值的个数并将该个数赋给status,初次看到这个位置的时候很难理解scanf()接收值得个数这一作用,在后续看了一些讲解的视频加上对scanf的作用有了更深的了解,才能梳理清楚其中的关系。
但是使用VS2010版本编译上方程序的时候会出现输入正常但是一旦输入q编译器就会闪退导致无法显示最后计算的结果,调式的文档如下:

“MyText01.exe”:
已加载“C:\Users\ASUS\Desktop\C\MyProject01\MyText01\x64\Debug\MyText01.exe”,已加载符号。
“MyText01.exe”: 已加载“C:\Windows\System32\ntdll.dll”,Cannot find or open
the PDB file “MyText01.exe”:
已加载“C:\Windows\System32\kernel32.dll”,Cannot find or open the PDB file
“MyText01.exe”: 已加载“C:\Windows\System32\KernelBase.dll”,Cannot find or
open the PDB file “MyText01.exe”:
已加载“C:\Windows\System32\msvcr100d.dll”,已加载符号。 “MyText01.exe”:
已加载“C:\Windows\System32\sechost.dll”,Cannot find or open the PDB file
“MyText01.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”,Cannot find or
open the PDB file 线程 ‘Win64 线程’ (0x67e4) 已退出,返回值为 0 (0x0)。 线程 ‘Win64
线程’ (0x40b0) 已退出,返回值为 0 (0x0)。 程序“[24276] MyText01.exe: 本机”已退出,返回值为 0 (0x0)。

针对这个问题首先选择把工具栏中解决平台方案由32位改为x64如下图:
Debug后选项一开始默认为32位
但是只在第一次调试过程中出现了示例中想要出现的结果并且仍然出现闪退现象,随后在通过查询之后选择在return 0;语句前加入system(“pause”);并且要在代码前加入#include<stdlib.h> (否则无法识别system)
此时再调试就能将编译器停在结果处,如下图:
正确结果,与书中相同
以上就是我对scanf()两个不同作用的看法,如果大家有什么更好的理解或者我理解中有什么不妥当的地方希望大家不吝赐教。

发布了1 篇原创文章 · 获赞 0 · 访问量 5

猜你喜欢

转载自blog.csdn.net/weixin_44539139/article/details/105597766
今日推荐