Если я вставляю код scanf, он не будет работать [дублировать]

classindex - это библиотека сканирования аннотаций времени компиляции, реализованная с использованием обработчика аннотаций.

15
задан James Taylor 12 September 2015 в 23:41
поделиться

3 ответа

scanf считывает данные определенного типа в адреса, которые передаются как аргументы второго, thrid, fouth и т. д. ...

int var;

здесь var является значением, а & var является адресом

scanf("%d",&var);

приведенный выше оператор говорит, что ==> read% d (целочисленный) тип данных в & amp; var address


char s[20];

здесь s является адресом не значением. потому что здесь s - массив чартов (мы называемся строкой).

имя массива указывает его адрес. s == & amp; s [0], оба они одинаковы.

scanf("%s",s);

приведенный выше оператор говорит, что ==> read% s (массив символов) тип данных в адресное место, начиная с s.


int a[20];

см. этот код

#include<stdio.h>
#define MAX 5

  main()
    {
        int a[MAX];
        int i;
        printf("Enter Values of array\n");
        for(i=0;i<MAX;i++)
        {
                printf("Enter a[%d] =  ",i);
                scanf("%d",&a[i]); // reading each time single integer value starting index with 0 and ending index MAX-1.
        }

     }

В C У нас не было ни одного спецификатора формата для сканирования группы целых чисел одновременно, как в группе сканирования символов в момент времени с помощью% s.

И здесь a = & amp; a [0];

вы можете сканировать одно целое значение непосредственно на адрес, на который указывает ,

scanf("%d",a);

printf("a[0]=%d\n",a[0]);

, если вы введете 10, затем печатает это значение [0] = 10.

Использование указателей:

, если вы используете указатели, как показано ниже, то вы узнаете. как увеличить указатель и получить значения в разных местах массива.

вы можете переместить местоположение указателя для чтения массивов. вы можете читать массивы с отсутствием местоположения движущегося указателя.

1.Испытывание массивов путем перемещения указателей

    #include<stdio.h>
    #define MAX 5

      main()
        {
            int a[MAX];
            int i;
            int *ptr;
            ptr = &a[0];
            printf("Enter Values of array\n");
               for(i=0;i<MAX;i++)
                    {
                    printf("Enter a[%d] =  ",i);
                    scanf("%d",ptr);
                    ptr++; //moving pointer 
                    }

        }

2.Развлечения массивов с отсутствием местоположения движущихся указателей

#include<stdio.h>
#define MAX 5

  main()
    {
        int a[MAX];
        int i;
        int *ptr;
        ptr = &a[0];
        printf("Enter Values of array\n");
           for(i=0;i<MAX;i++)
                {
                printf("Enter a[%d] =  ",i);
                scanf("%d",ptr+i); //we are not moving ptr position we scaning each time into next location by incrementing i 
                }

    }

, когда указатель увеличивается, приращение зависит от типа указателя. Здесь ptr является целым указателем, поэтому ptr + 1 будет увеличивать ptr + sizeof (int).


int a[5][5];

Это двухмерный массив, поэтому вам нужно 5 указателей здесь для сканирования, поэтому я был объявлен указателем массив.

#include<stdio.h>
#define MAX 5

  main()
    {
    int a[MAX][MAX],i,j;
    int *pointer[MAX];

    for(i=0;i<MAX;i++)
    pointer[i]=&a[i][0]; //initializes the pointers 

    printf("Enter elements :\n");
    for(i=0;i< MAX;i++)
        {   
        for(j=0;j<MAX;j++)
            {

            printf("Enter the a[%d][%d] element: ",i,j);
            scanf("%d",pointer[i]+j); //each time you will move like 00 01 02 03 04 and second time 10 11 12 13 14 and so on...
            //printf("%u or %x",pointer[i]+j,pointer[i]+j);//un comment this line and see the addresses how the address incrementing for each element
            }
        }

    printf("The Given Matrix:\n\n");
    for(i=0;i<MAX;i++)
                {
                for(j=0;j<MAX;j++)
                        {
                        printf("%d",*(pointer[i]+j));
                        printf("\t\t");
            }
        printf("\n\n");
                }

    }

Прямое сканирование

    printf("Enter elements :\n");
    for(i=0;i< MAX;i++)
        {   
        for(j=0;j<MAX;j++)
            {

            printf("Enter the a[%d][%d] element: ",i,j);
            scanf("%d",&a[i][j]); //we can't do like this a++ or ++a or a+i this is illegal in C. for that purpose we are using pointers  
            }
        }

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

перейдите по этой ссылке: прочитайте wiki и прочитайте язык программирования C (второе издание) - Брайан У. Керниган и Деннис М. Ричи

23
ответ дан Community 17 August 2018 в 11:51
поделиться

В C строки представляют собой массивы символов (завершаются символом \0).

Имя массива возвращает указатель на первый элемент массива (ячейка памяти, где хранится массив), а имя скалярной переменной возвращает значение скаляра, поэтому вам нужно использовать оператор & для получения места памяти скаляра, в котором вам нужно записать значение.

0
ответ дан Nemanja Boric 17 August 2018 в 11:51
поделиться
  • 1
    Я согласен, я изменю свой ответ, чтобы отразить это. – Nemanja Boric 23 August 2013 в 13:49

Поскольку строки C имеют тип char []. Имя массива имеет значение его адреса, но переменной int нет, вам нужно использовать &

. Неправильно писать void main, вы всегда должны использовать int main .

6
ответ дан Yu Hao 17 August 2018 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: