我正在尝试输入电话号码并以这种格式打印出来(888)999-1111格式,但当我试图打印出来时,我得到了一些奇怪的输出,这不是我所期望得到的。我正在打印出phone的值,在输入和打印函数bt中,它们是不同的。输入功能中的正确,但打印功能中的不正确。提前感谢您的帮助。
int phoneInput(void)
{
long int phone = 0;
printf("Input the politicians phone number with no speaces: ");
scanf("%ld", &phone);
printf("test : %ld", phone);
return phone;
}
int printPhone(long int phone)
{
int i = 10; //the number of digits in the phone
char output[11];
printf("Test: %ld", phone);
for (i = 0; i < 10; i ++)
{
while (phone > 0)
{
output[i] = phone % 10;
phone /= 10;
}
}
printf("- Phone number: (");
i = 0;
for (i = 0; i < 3; i++)
{
printf("%d", output[i]);
}
printf(")");
i = 3;
for(i = 3; i < 6; i++)
{
printf("%d", output[i]);
}
i = 6;
printf("-");
for(i = 6; i < 10; i++)
{
printf("%d", output[i]);
}
return 0;
}
7条答案
按热度按时间wydwbb8l1#
你需要将一个值存储为
int
、long int
或其他数值类型的唯一原因是你必须对它进行算术运算(除非是家庭作业要求)。不要被电话号码是由数字组成的这个事实所迷惑--最有意义的是存储为字符串!如果您 * 可以 * 将电话号码存储为字符串,则应该:
一旦你有了它,就更容易对它执行字符串操作了:
xpszyzbs2#
电话号码应存储为
country
、area
、subscriber
。您给出的示例为
1 888 9991111
请注意,国家/地区号码的任何前导
00
实际上是 * 指示交换机拨打国际号码的本地方法 *。在西班牙,很长一段时间以来都是9
。国际号码拨号的通用标识现在是+
。另请参见https://www.internationalcitizens.com/international-calling-codes/
k4aesqcs3#
Sarah,首先我会将电话号码扫描为字符串,这样做更容易。另一个原因是将其扫描为字符串
long int
可能不够,在一些平台上long是32位。但如果您需要'long int',最好的方法是:另一种方法是:
tquggr8v4#
在您现有的代码中,问题在于循环:
内部循环将继续执行,而不会递增
i
,从而导致数组中的同一位置被反复写入。打印
output
时,请在printf中使用"%c"
。OP发布的代码中的问题列表。这些只是OP发布的代码中的问题。逻辑可以通过许多其他方式完成,但是,此答案仅关注OP代码中的问题:
phoneInput
函数应返回long int
而不是int
for and while loop
-不需要两个循环。这是主要错误。这会导致每次都覆盖数组中的相同位置。已修复问题的完整代码(根据OP的原始代码):
输出:
gdx19jrr5#
我对你的代码做了一些修改。请看一下。
ds97pgxw6#
空打印电话号码(向量电话号码){字符串电话键盘[10] {“000”,“111”,“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PRS”,“TUV”,“WXY”};
}
算法:有3^n组合n位数字的电话号码。例如:电话号码[n] = {2,3,4} =〉3^3 = 27。请使用额外的空间来跟踪数字中的字母=〉letterIndex[电话号码长度]
eyh26e7m7#
以及
是要使代码正常工作而需要在代码中进行的更改。
第一个变化(
+ '0'
)是将int
转换为char
,第二个变化是因为要打印char而不是int。我建议您查看printf的手册和ascii table以更好地理解。