我是C编程的新手,因为你已经可以通过我的问题猜测了。我正在尝试输入4位数的有效引脚,例如但是,如果第一个数字是零,即0111,我程序中的逻辑不会递增计数器。简而言之,我坚持如何解释以零开头的引脚。我可以添加一个错误检查,告诉用户该引脚不能以零开头,但我不想在可能的情况下采用它。
这是我到目前为止所做的:
/*
Program name: Count num of digits
*/
#include <stdio.h>
#define PIN_LENGTH 4
int main()
{
int pin = 0;
int counter = 0;
printf("Enter your PIN: ");
scanf("%d", &pin);
while(pin != 0)
{
pin = pin / 10;
counter++;
}
if(counter == PIN_LENGTH)
{
printf("Valid pin of %d digits\n", counter);
}
else
{
printf("Invalid pin of %d digits\n", counter);
}
return(0);
}
如您所见,我将引脚编号除以10,并将新值分配给引脚。
然后我将它与符号名称值4进行比较,如果它们的长度相同,我说它有效,如果没有,则无效。
但是如何解释以零开头的引脚...
答案 0 :(得分:2)
正如@Olaf所说,将字符串作为字符串读取。按如下方式定义您的图钉:char pin[PIN_LENGTH + 1]
,使用&#39; + 1&#39;对于&#39; \ 0&#39;字符。然后在scanf中,您可以说scanf("%4s", pin)
来读取4个字符。最后,当您想要向下拖动值时,您只需减去“0”和“0”。从任何位置读取的角色,并从那里将它们视为整数。
答案 1 :(得分:1)
如果您将其作为整数读取,则实际上无法实现。你可以做的一件事就是将它作为一个字符串读取,计算它的长度并找出它是否正确输入。之后,您可以使用ASCII表将字符转换为整数,以获取每个引脚编号。
答案 2 :(得分:0)
您可以将pin
的类型更改为char *
并执行此操作
#include <stdio.h>
int size(char *, int);
int main() {
char pin[5];
printf("Enter your pin: ");
fgets(pin, sizeof(pin), stdin);
if(size(pin, sizeof(pin)/sizeof(char)) == 5) {
printf("Valid pin of 4 digits\n");
} else {
printf("Invalid pin of %d digits\n", size(pin) - 1);
}
return 0;
}
int size(char * a, int size) {
int i;
for (i = 0; a[i] != '\0' && i < size; i++);
return i;
}
答案 3 :(得分:0)
fgets()
是更好的方法,但要使用scanf()
执行此任务...
使用"%n"
记录扫描的字符数。
printf("Enter your PIN: ");
int n1, n2;
if (scanf(" %n%d%n", &n1, &pin, &n2) == 1 && (n2 - n1) == 4)) {
// Success, 4 character `int` has been read.
}
注意:这将接受&#34; + 123&#34;。