我的程序存在问题,该程序应该拆分用户进入三组的电话号码(例如1231231234),并显示如下(123)-123-1234。我不确定如何拆分此号码以及使用什么来完成它。我没有完成代码聚会,但这是我得到的。
#define SIZE 3
int main(void){
int option, j;
int phList = 0;
int phoneNum[SIZE];
printf("---=== Phone Numbers ===---\n");
while(1){
printf("\n");
printf("1. Display Phone List\n");
printf("2. Add a Number\n");
printf("0. Exit\n");
printf("\n");
printf("Please select from the above options: ");
scanf("%d", &option);
if(option == 0){
printf("Exiting Phone Number App. Good Bye!!!\n");
return 0;
}
if(option == 1){
printf("\n");
printf("Phone Numbers\n");
printf("==============\n");
for(j = 0; j < phList; j++){
printf("\n", phoneNum[j]);
}
}
if(option == 2){
if(phList < SIZE){
printf("\n");
printf("Add a Number\n");
printf("============\n");
scanf("%d", &phoneNum[phList]);
phList++;
} else {
printf("Add a Number\n");
printf("============\n");
printf("ERROR!!! Phone Number List is F$
}
}
}
return 0;
}
答案 0 :(得分:3)
我会考虑使用fgets()
将电话号码作为字符串,而不是将其作为整数。然后,您可以过滤输入,以便只保留数字,允许用户根据需要输入括号,空格或短划线。最后,sscanf()
可用于将过滤后的字符串扫描为三个字符串,用于区号,交换号和用户号。如果您愿意,可以按atoi()
或strtol()
将这些字符串转换为数字。
OP似乎假设电话号码遵循North American Numbering Plan的格式,但电话号码格式可能不同。字符串表示比整数表示更灵活,使得将来对代码的修改更容易。
以下是如何完成此操作的示例:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void filter_num(char *str);
int main(void)
{
char buffer[1000];
char area_code[4];
char xch_num[4];
char sub_num[5];
printf("Enter phone number: ");
if (fgets(buffer, sizeof buffer, stdin) == NULL) {
fprintf(stderr, "Error in fgets\n");
exit(EXIT_FAILURE);
}
filter_num(buffer);
if (sscanf(buffer, "%3s%3s%4s", area_code, xch_num, sub_num) != 3) {
fprintf(stderr, "Phone number format error\n");
exit(EXIT_FAILURE);
}
printf("Phone number is: (%s) %s-%s\n",
area_code, xch_num, sub_num);
return 0;
}
void filter_num(char *str)
{
char *p = str;
while (*p != '\0') {
if (isdigit(*p)) {
*str++ = *p;
}
++p;
}
*str = '\0';
}
答案 1 :(得分:0)
我建议定义一个分割数字和显示的功能,请看看这个,我刚刚为你编写并且工作正常:
void DisplayNum(long long int PhNum)
{
printf("\n ");
for(int i=1; i<=10; ++i) // Since Phone Number Contains 10 digits
{
int digit= PhNum/(pow(10,10-i)); // Spliting digits
digit= digit%10;
if(i==1)
{
printf(" (");
}
if(i==4)
{
printf(")-");
}
if(i==7)
{
printf("-");
}
printf("%d",digit); // Displaying Digits
}
}
但请务必在开头使用#include<math.h>
因为我在这里使用pow()
功能。然后,您只需传递阵列中的每个电话号码即可显示此功能。在数组中显示每个电话号码的for循环将类似于:
for(j = 0; j < phList; j++){
DisplayNum(phoneNum[j]);
}