2017-02-19 11 views
1

Предполагается, что эта программа попросит пользователя ввести положительное целое число (целое число может быть любого числа цифр в диапазоне целочисленного типа) и заменить каждую цифру на сумму этой цифры плюс 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

Ваш код абсолютно правильный, за исключением глупой ошибки в следующем фрагменте кода.

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]); 

Теперь он отлично работает.

+0

Всегда что-то простое. Спасибо за помощь! –

1

Виновник в вашем коде является точкой с запятой после цикла:

for(i = 0; i < n; i++)**;** 
    scanf("%1d", &a[i]); 

Так зсап, что вы писали в основном из за петлю и сохраняют первую цифру в [п].

+0

Это всегда мелочи. Без каких-либо предупреждений компилятора я понятия не имел, где искать. Благодаря! –

+0

вы можете скомпилировать свой код с помощью -g и отладить его с помощью gdb :) –

+0

@ ch.sarath Я предлагаю 'cc -Wall a.c' – minigeek

Смежные вопросы