将电话号码拆分为三组

时间:2017-03-25 18:53:20

标签: c

我的程序存在问题,该程序应该拆分用户进入三组的电话号码(例如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;
}

2 个答案:

答案 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]);
                              }