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
相关产品推荐
相关产品推荐

