搬搬砖得了 2022-07-18 13:16 采纳率: 50%
浏览 47
已结题

C语言scanf为什么为我捕获了意外的数字?

问题描述:
在C语言中,char类型是可以被int类型所接收的它的值将会是对应字符所产生的ASCII码值,但是,我在执行输入语句(scanf)的时候,获得了一个意外的数字,程序代码如下

int n, m;
scanf("%d %d", &n, &m);
printf("n=%d, m=%d", n, m);

输入2,2   ->  结果: n=2, m=8
这个8是怎么来的,我设想,可能是在输入的时候字符和数字错误的被C语言scanf接收了,但是并不是这样。
我重新尝试了下面的代码

int testCommmaToInt = ",";
printf("%d \n", testCommmaToInt);
// 我执行了这段程序但是没有什么作用,C语言给我返回了我引号中内容的内存地址

C语言为我提供了一些警告,但是程序依然可以运行

main.c:19:23: warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]
int n, m;
scanf("%d %d", &n, &m);
printf("n=%d, m=%d", n, m);

int new;
scanf("%d", &new);
printf("new=%d \n", new);

我重新执行了,这段这段程序并为这段程序添加new的变量名,并实验C语言是否可以为我接收我,上一个scanf剩余的输出流,但事实并非如此,new变量并没有捕获任何信息并且,它在我输入2,2按下Enter的时候已经结束了scanf语句的录入。

这是怎么回事?请帮帮我,非常感谢!

  • 写回答

3条回答 默认 最新

  • emXiaoMing 2022-07-18 13:35
    关注

    下面那段把new以char也就是%c格式输入,可以发现逗号还是在流里的。你的代码里以%d格式输入,scanf还是会认为逗号是非法输入,所以new仍然输入失败

    img


    至于m的值,就要看编译器给的初始值是多少了,在VS里面是0xcccccccc,所以打印出来是这么个东西

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 快乐鹦鹉 2022-07-18 13:25
    关注

    8只是个随机数而已
    scanf中指定两个整数之间用空格分隔,你实际输入用的是逗号,scanf是无法识别后面的数字2的。所以实际你只是成功输入了一个n值,m是没有输入值的
    int a = scanf("%d %d",&n,&m);
    你可以如上测试一下,a的值是1,表明只是成功输入一个变量。m的值8是个随机值,凑巧

    评论 编辑记录
  • 赵4老师 2022-07-18 14:28
    关注

    仅供参考:

    #include <stdio.h>
    char s[]="123 ab 4";
    char *p;
    int v,n,k;
    void main() {
        p=s;
        while (1) {
            k=sscanf(p,"%d%n",&v,&n);
            printf("k,v,n=%d,%d,%d\n",k,v,n);
            if (1==k) {
                p+=n;
            } else if (0==k) {
                printf("skip char[%c]\n",p[0]);
                p++;
            } else {//EOF==k
                break;
            }
        }
        printf("End.\n");
    }
    //k,v,n=1,123,3
    //k,v,n=0,123,3
    //skip char[ ]
    //k,v,n=0,123,3
    //skip char[a]
    //k,v,n=0,123,3
    //skip char[b]
    //k,v,n=1,4,2
    //k,v,n=-1,4,2
    //End.
    
    
    
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件
  • ¥15 Stata数据分析请教
  • ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料
  • ¥15 51单片机的外部中断,按下按键后不能切换到另一个模式