В вашем существующем коде проблема заключается в циклах:
for (i = 0; i < 10; i ++)
{
while (phone > 0)
{
output[i] = phone % 10;
phone /= 10;
}
}
Ваш внутренний цикл будет выполняться без увеличения i
, вызывая повторную и повторную запись одной и той же позиции в массиве.
i = 9;
do
{
output[i] = (phone % 10) + '0';
phone /= 10;
i--;
}while((phone > 0) && (i >= 0));
Пожалуйста, используйте "%c"
в printf при печати output
.
Список проблем в коде, опубликованном OP.Это просто проблемы в коде, опубликованном OP.Логика может быть реализована многими другими способами, но этот ответ просто фокусируется на проблемах в коде OP как есть:
phoneInput
функция должна возвращать long int
вместо int
for and while loop
- Две петли не нужны.Это главная ошибка.Это приводит к тому, что одна и та же позиция в массиве перезаписывается каждый раз. - Счетчик цикла для позиции массива начинается с 0, в результате чего цифры записываются в обратном порядке в массиве
- Поскольку вы используетемассив символов, сохраняйте и печатайте char вместо int.
Полный код с исправленными проблемами (согласно исходному коду OP):
#include <stdio.h>
#include <string.h>
long int phoneInput(void)
{
long int phone = 0;
printf("Input the politicians phone number with no spaces: ");
scanf("%ld", &phone);
printf("test : %ld\n", phone);
return phone;
}
int printPhone(long int phone)
{
int i = 10; //the number of digits in the phone
char output[11];
memset(output, '0', sizeof(output));
printf("Test: %ld\n", phone);
i = 9;
do
{
output[i] = (phone % 10) + '0';
phone /= 10;
i--;
}while( (phone > 0) && (i >= 0));
printf("- Phone number: (");
i = 0;
for (i = 0; i < 3; i++)
{
printf("%c", output[i]);
}
printf(")");
i = 3;
for(i = 3; i < 6; i++)
{
printf("%c", output[i]);
}
i = 6;
printf("-");
for(i = 6; i < 10; i++)
{
printf("%c", output[i]);
}
return 0;
}
void main()
{
long int phone;
phone = phoneInput();
printPhone(phone);
}
Выход:
Input the politicians phone number with no spaces: 8889991111
test : 8889991111
Test: 8889991111
- Phone number: (888)999-1111