You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用scanf()输入电话号码时无法正常读取值问题求助

故障原因及修复方案

1. scanf()无法正常读取的核心问题

你使用的scanf(" %d ", &number);格式串末尾多了空格,该空格会指示scanf()持续吞噬输入流中的空白字符(换行、空格、制表符等),直到遇到非空白字符才会返回,因此你输入号码按回车后程序会一直卡住等待后续输入。
直接将该语句修改为scanf("%d", &number)即可解决输入卡住的问题。

2. 其他逻辑错误修正

  • 求首位数字的代码存在死循环问题,你的循环只对firstDigit赋值,没有更新参与运算的变量值,会无限循环。正确写法参考:
// 用临时变量计算首位,避免修改原number值影响后续逻辑
int firstDigit = number;
while (firstDigit >= 10) {
    firstDigit = firstDigit / 10;
}
  • 注意int类型的取值范围限制:16位int最大取值为32767,无法容纳7位电话号码,若你的编译环境是16位平台,需要将number的类型改为long。如果后续要兼容11位手机号,更推荐直接读取字符串做校验,避免数值溢出问题。
  • 所有printf()输出语句末尾建议添加\n换行符,避免多条输出内容拥挤在同一行,影响可读性。

修复后的参考代码

#include <stdio.h>

int main (void){
    long number = 0;
    int loop = 0;

    while(loop == 0){
        printf("Enter a phone number: ");
        scanf("%ld", &number);
        printf("Input number: %ld\n", number);
        
        if(number == 0){
            printf("Exiting.\n");
            loop = 1;
            break;
        }

        // 计算首位数字
        long firstDigit = number;
        while(firstDigit >= 10){
            firstDigit = firstDigit / 10;
        }

        // 判断是否为7位号码
        if((number / 1000000) >= 1 && (number / 1000000) < 10){
            if(firstDigit == 1){
                printf("Invalid central office code: 1\n");
            }
            else if(firstDigit == 0){
                printf("Invalid central office code: 0\n");
            }
            else{
                long firstThree = (number / 10000);
                long lastFour = (number % 10000);
                printf("%ld - %ld\n", firstThree, lastFour);
            }
        }
        else{
            if((number / 1000000) >= 10){
                printf("Invalid phone number: too many digits\n");
            }
            else if((number / 1000000) < 1){
                printf("Invalid phone number: too few digits\n");
            }
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Turk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:30:01