每个数字的输出都相同?

时间:2017-02-19 18:57:03

标签: c pointers math output

该程序应该要求用户输入正整数(整数可以是整数类型范围内的任意位数),并用该数字加上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;
}

2 个答案:

答案 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]中。