Что именно означает «N» в поиске имени «Ошибка» для ISO «scoping [-fpermissive]»? - PullRequest
1 голос
/ 19 марта 2020

Я только что написал программу, которая вычисляет EAN или UP C последний раз git. и вот процесс:

1. Рассчитать сумму цифр в нечетных позициях и умножить эту сумму на 3 (четные числа)

2. Рассчитать сумму цифр в четные позиции (нечетные числа)

Добавьте результаты первой суммы ко второй сумме и вычтите 1 из общей суммы.

Рассчитайте остаток при делении на 10.

Вычтите остаток из 9

#include <stdio.h>

int main(void) 

{

    int A[12], sumEven, total;
    int sumOdd = 0;

    printf("Enter your 12-digits number:");
    scanf("%s", &A);

    for(int N = 0; N < 12; N += 2);
    {
    sumOdd = sumOdd + A[N];
    }

    for(int L = 1; L < 12; L += 2);
    {
    sumEven += A[L];
    }

    total = (sumEven * 3 + sumOdd) - 1;
    total %= 10;
    total = 9 - total;

    printf("The digit is:%d", total);

    return 0;
}

И вот сообщения об ошибках:

[Ошибка] поиск имени N изменен для ISO 'for' scoping [-fpermissive]

[Примечание] (если вы используете '-fpermissive', G ++ примет ваш код)

[Имя] Поиск имени 'L' изменен для ISO 'for' scoping [-fpermissive]

Я предполагаю, что это как-то связано с моими циклами, но я не знаю где именно, потому что раньше я видел подобное использование l oop. Пожалуйста, скажите мне, спасибо

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Существует много ошибок с кодом:

  • Элементы управления l oop оканчиваются на ;, что делает их полными l oop, а управляющие переменные N и L, используемые в следующих блоках кода, находятся вне области видимости.

  • Массив неправильного типа и слишком короткий, чтобы содержать 12 цифр (с нулевым терминатором).

  • Оператор scanf должен сбрасывать & и ограничивать длину ввода для предотвращения переполнения буфера.

  • Введенные данные цифры персонажа. Если вычтите '0', которое преобразуется в значение цифры c.

  • Одна переменная int sumEven не была инициализирована.

I исправлено и прокомментировано, где изменено.

#include <stdio.h>

int main(void) 
{
    char A[13];                                 // change type, and length
    int sumEven = 0;                            // initialise
    int sumOdd = 0;
    int total;

    printf("Enter your 12-digits number:");
    scanf("%12s", A);                           // restrict the length and remove &

    for(int N = 0; N < 12; N += 2)              // remove ;
    {
        sumOdd = sumOdd + A[N] - '0';           // ASCII adjustment
    }

    for(int L = 1; L < 12; L += 2)              // remove ;
    {
        sumEven = sumEven + A[L] - '0';         // ASCII adjustment
    }

    total = (sumEven * 3 + sumOdd) - 1;
    total %= 10;
    total = 9 - total;

    printf("The digit is:%d", total);
    return 0;
}
1 голос
/ 19 марта 2020

Вы случайно поставили ; в конце своих for петель

for(int N = 0; N < 12; N += 2); // <-- note the semicolon here
    {
    sumOdd = sumOdd + A[N];
    }

Так что эта часть кода

    {
    sumOdd = sumOdd + A[N];
    }

выходит за рамки вашей for l oop, где N не определено. Просто удалите эти точки с запятой в конце цикла for, чтобы избавиться от этой ошибки. Обратите внимание, что с вашим кодом есть другие проблемы, но это является причиной этой конкретной ошибки.

0 голосов
/ 19 марта 2020

как сказал @Eraklon, вы не должны ставить это ; после циклов for. for(...); это неправильно.

также обратите внимание, что ваш sumEven не инициализирован, что, вероятно, вызовет cra sh.

...