【发布时间】:2021-01-18 14:07:13
【问题描述】:
我正在尝试让我的程序删除每一行的最后一个数字。
我被困在哪里,不明白为什么 number = number % 10 在第二个 for 循环中不起作用?
#include <stdio.h>
#include <math.h>
int main(){
long long number;
printf("Enter a number\n");
printf("Enter your number = ");
scanf("%d", &number);
for(int j=1; j<= (log10(number)+1); j++){
for(int i=1; i<= (log10(number)+1); i++){
printf("%d ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
}
printf("\n");
}
return 0;
}
我的输出:
Enter a number
Enter your number = 12345
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
我要输出的内容:
Enter a number
Enter your number = 12345
5 4 3 2 1
5 4 3 2
5 4 3
5 4
5
【问题讨论】:
-
您调用了未定义的行为,方法是使用
%d并将long long*而非预期的int*传递给scanf()。number = number % 10也不在您发布的代码中。请发帖Minimal, Reproducible Example。 -
number = number % 10打破了number,所以它在内循环中是有害的,除非number中的数据保存在其他地方。 -
但是 %d 有问题吗?它似乎没有影响它。我应该创建一个新变量吗?
-
%d是有问题。 I got wrong result。但它与number = number % 10没有直接关系。 -
%lld应该用于读取long long。可以通过将i<= (log10(number)+1)更改为i<= (log10(number)+1) - (j - 1)来完成删除。
标签: c loops for-loop numbers printf