这对我来说有点混乱,但我必须看看我在x中出现了多少次。 因此,如果某人为i输入3并且x为4294967295,那么它应该说0次,但如果有人输入9表示i和4294967295表示x,则应该说3次。
这就是我所拥有的,但是输出用0表示0,所以它不起作用..
int main(int argc, char** argv) {
unsigned int i;
scanf("%u", &i);
unsigned int x;
scanf("%u", &x);
int output = 0;
int t = 0;
while (t < 10) {
x /= 10;
if (i == x) {
output++;
}
t++;
}
printf("%d", output);
}
答案 0 :(得分:6)
问题是您将i
与x
的整个进行比较,而不是检查x
的每个数字。
最简单的解决方案可能是将i
作为字符阅读,请确保it's a digit。然后将x
作为字符串读取(并确保它也是所有数字)。然后,对于字符串x
中的每个字符,将其与i
进行比较。
答案 1 :(得分:3)
您应从x
中提取每个数字,并将其与数字i
进行比较。
#include <stdio.h>
int main(void) {
unsigned int i;
scanf("%u", &i);
unsigned int x;
scanf("%u", &x);
int output = 0;
int t = 0;
while(x > 0) {
t = x % 10; // least significant digit of x
if(t == x) {
output++;
}
x /= 10;
}
printf("%d", output);
}
答案 2 :(得分:2)
int main(int argc, char** argv) {
unsigned int i;
scanf("%u", &i);
if(i > 9) { // check it's a single digit
printf("expecting a single digit\n");
return 1; // to indicate failure
}
unsigned int x;
scanf("%u", &x);
int output = 0; // initialized output, removed t (use x directly instead)
if(x == 0) { // special case if x is 0
if(i == 0) {
output = 1;
}
} else {
while(x > 0) { // while there is at least a digit
if(i == (x % 10)) { // compare to last digit
output++;
}
x /= 10; // remove the last digit
}
}
printf("%d\n", output); // added \n to be sure it's displayed correctly
return 0; // to indicate success
}
另外,我建议使用更明确的变量名称,例如digit
和number
,而不是x
和i
。