Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scanf对电话号码的位数求和_C - Fatal编程技术网

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

使用scanf对电话号码的位数求和,c,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

我想让我的代码提示用户输入一个电话号码,格式为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是零。如何将每个数字逐个分配给每个变量?

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

scanf(" %*c%*c%d %*c%*c%d %*c%d ", &i, &j, &k);

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

scanf(" %*c%*c%d %*c%*c%d %*c%d ", &i, &j, &k);

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

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


顺便说一句:您应该验证来自
scanf
的返回值是否正确。在本例中,正确的返回值为10。任何其他数字都表明用户没有输入有效的电话号码。

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

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


顺便说一句:您应该验证来自
scanf
的返回值是否正确。在本例中,正确的返回值为10。任何其他号码都表明用户没有输入有效的电话号码。

我对c非常陌生,也许我在这一点上根本就错了?你必须使用
scanf
?您可以尝试读取整个字符串,然后检查它。或者使用
getc
一次读取一个字符。我希望是这样,但是这是一个家庭作业,要求我们使用scanfor。对于记录,我对c非常陌生,也许我在这一点上根本就错了。你必须使用
scanf
?您可以尝试读取整个字符串,然后检查它。或者使用
getc
一次读取1个字符。我希望是这样,但这是一个家庭作业,要求我们使用Scanfinitesting,似乎我误解了%*c的实际操作。谢谢,我会试试的@Froobyflake您没有误解
%*c
的功能。您使用的是正确的。否,可选的起始星号表示数据将从流中读取,但会被忽略(即,它不会存储在参数所指向的位置)@用户3386109的答案是正确的。那么,我误解了。我将从我的答案中删去。我同意@user3386109答案是更好的选择。有趣的是,我似乎误解了%*c的实际做法。谢谢,我会试试的@Froobyflake您没有误解
%*c
的功能。您使用的是正确的。否,可选的起始星号表示数据将从流中读取,但会被忽略(即,它不会存储在参数所指向的位置)@用户3386109的答案是正确的。那么,我误解了。我将从我的答案中编辑出来。我同意@user3386109答案是更好的选择。