使用scanf对电话号码的数字求和

时间:2016-10-15 02:01:12

标签: c

我希望我的代码提示用户输入表格1(xxx)-xxx-xxxx的电话号码,然后汇总该号码的数字。但是我不知道我的代码有什么问题。见下文

printf("Enter a phone number in 1(xxx)-xxx-xxxx format: \n");
scanf(" %*c%*c%d %d %d %*c%*c%d %d %d %*c%d %d %d %d", &i, &j, &k, &l, &m, &n, &o, &p, &q, &r);

sum = (i + j + k + l + m + n + o + p + q + r);
realsum = sum + 1;

printf("The sum of the digits = %d \n\n", realsum)

有人可以帮忙吗?它似乎将数字的第一部分(xxx)完全分配给i,j为零。如何让每个数字逐个分配给每个变量?

2 个答案:

答案 0 :(得分:4)

问题是%d会一直读取,直到找到一个不能成为十进制数字一部分的字符。因此,如果用户输入1(123)-456-7890,则第一个%d会将i设置为123

解决方案是使用%1d。这告诉scanf读取一位十进制数字。

btw:您应该验证scanf的返回值是否正确。在此示例中,正确的返回值为10.任何其他数字表示用户未输入有效的电话号码。

答案 1 :(得分:1)

您确实考虑了用户输入的非整数字符,但整数被读取,因此123不会被视为1,而是2然后{{1而是3

123