2015-03-04 2 views
-2

В моей программе я хочу ввести некоторые цифры до ввода 0. Когда я ввожу 0, программа должна остановиться и показать номера в порядке. Это почти закончено, но у меня есть одна проблема. Я не должен использовать array, это запрещено.Прочитать значение от адреса с указателями - Программирование на языке C

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

int main() 
{ 
    int number; 
    int *ptr; 
    int i = 0, j = 0; 

    ptr = &number; 

    number = (int*)malloc(2000); 

    do{ 
     printf("Enter a number : "); 
     scanf("%d",ptr); 

     printf("\n######\n"); 
     printf("%d. number = %d \t%p\n",i+1,*(ptr),(ptr+i)); 
     printf("\n######\n"); 
     i++; 
    } while(((number)) != 0); 

    printf("\n!!!!############!!!!\n"); 
    for(j = 0 ; j < i; j++){ 
     number=number+j; 
     printf("%d. number = %d \t%p\n",j+1,(number),&(number)); 
    } 
    return 0; 
} 
+0

Есть несколько вещей неправильно с вашим кодом. Я думаю, вам следует читать указатели, 'scanf' и' malloc', чтобы вы знали, как их использовать. – eigenchris

+0

Благодарим вас за помощь. '& (number)' эта строка дает адрес, но интересно, я не могу взять цифры с адреса. вы можете мне помочь за это – abbays

ответ

0

У вас есть ряд проблем. Я думаю, вы пытались сделать что-то слишком сложное для своего уровня понимания прямо сейчас.

Вы должны узнать о указателях с самого начала и убедиться, что вы понимаете операторы * и &. Попробуйте написать несколько простых простых программ, чтобы у вас было хорошее понимание.

Оттуда вы можете перейти на scanf и malloc, так как они полагаются на сильно указатели.

Вот рабочая версия кода:

int main() 
{ 
    int* number;  // this is should be a pointer 
    //int *ptr; 
    int i = 0, j = 0; 

    //ptr = &number; 

    number = (int*)malloc(2000); 

    do{ 
     printf("Enter a number : "); 

     // scan an integer into the ith place in memory 
     //  after the address pointed to by "number" 
     scanf("%d",number+i); //number+i is already an address, don't use & 

     printf("\n######\n"); 
     printf("%d. number = %d \t%p\n",i+1,*(number+i),number+i); 
     printf("\n######\n"); 
     i++; 
     // need to use a -1 since we incremented i 
    }while(*(number+i-1) != 0); 

    printf("\n!!!!############!!!!\n"); 
    for(j = 0 ; j < i; j++){ 
     //=number+j; 
     printf("%d. number = %d \t%p\n",j+1,*(number+j),number+j); 
    } 
    return 0; 
} 
+0

Спасибо за помощь, я вижу, мне нужно учиться больше. – abbays

+0

@abbays. Я думаю, что каждый считает, что указатели сбивают с толку, когда они впервые изучают их. Я нашел [эту серию видеороликов по указателям] (https://www.youtube.com/playlist?list=PL2_aWCzGMAwLZp6LMUKI3cc7pgGsasm2_) очень полезно, если вы заинтересованы. – eigenchris

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

  • Нет связанных вопросов^_^