该程序应该要求用户输入正整数(整数可以是整数类型范围内的任意位数),并用该数字加上6模数10的总和替换每个数字。程序然后应该在显示输出之前将第一个数字与最后一个数字交换。
示例输入/输出:
Enter the number of digits of the number: 5
Enter the number: 92828
Output: 48485
出于某些原因,我的代码,无论我输入什么号码,一切都只是6。(所以如果我输入5个号码,我得到666666)。我是指针的新手,所以有问题吗,或者我只是有一些数学错误?该程序在没有任何编译器警告的情况下运行。
#include <stdio.h>
#include <stdlib.h>
void replace(int *a, int *b, int n);
void swap(int *p, int *q);
int main()
{
int n = 0;
int i = 0;
int a[100], b[100];
//Prompt user to enter number of digits
printf("Enter the number of digits you'd like to replace: ");
scanf("%d", &n);
//Prompt user to enter the number to use
printf("Enter the number to use: ");
for(i = 0; i < n; i++);
scanf("%1d", &a[i]);
//replace function
replace(a, b, n);
for(i = 0; i < n; i++)
printf("%d", b[i]);
printf("\n\n");
return 0;
}
void replace(int *a, int *b, int n)
{
int i;
for (i = 0; i < n; i++)
{
*(b+i) = (*(a+i)+ 6) % 10;
}
printf("The output is: ");
//swap function
swap(b, (b+ (n-1)));
}
void swap(int *p, int *q)
{
int t;
t = *p;
*p = *q;
*q = t;
}
答案 0 :(得分:2)
除了以下代码段中的愚蠢错误外,您的代码绝对正确。
for(i = 0; i < n; i++);
scanf("%1d", &a[i]);
为什么在;
声明之后放置for
?这意味着您的for
循环只迭代一次(而不是5 n = 5
)。因此,只有第一个数字输入被用户考虑,但也存储在a[5]
中(考虑n = 5
),a[0]
到a[4]
中存储的值是所有垃圾价值。
只需删除分号并按如下方式更新代码即可。
for(i = 0; i < n; i++)
scanf("%1d", &a[i]);
现在工作正常。
答案 1 :(得分:1)
代码中的罪魁祸首是for循环后的分号:
for(i = 0; i < n; i++)**;**
scanf("%1d", &a[i]);
因此,您编写的scanf基本上不在for循环中,并将第一个数字存储到[n]中。