2015-03-17 2 views
0

Я пытаюсь написать программу ac, которая считывает штрих-код (длиной 10 цифр) из stdin, добавляет первые 9 цифр штрих-кода, а если вторая цифра из суммы 9 цифр равна 10-я цифра в штрих-коде записывает штрих-код в стандартный вывод.Правильно это или есть лучший способ?

Вот что у меня есть, может кто-нибудь, пожалуйста, помогите мне или скажите мне, что случилось с тем, что у меня есть или что добавить. можно ли поместить весь штрих-код в массив символов и суммировать первые 9 цифр и сравнить его со значением bar [9]? как бы я это сделал? Благодарности

#include <stdio.h> 

int main(void){ 
    int sum = 0; 
    char bar[10]; 
    int i; 
    for(i = 0; i < 9; i++){ 
    scanf("%d", &bar[i]); 
    } 

    for(i = 0; i < 10; i++){ 
    sum += bar[i]; 
    } 

    if(sum[1] == bar[10]){ 
     return 1; 
    } 
    return 0; 
} 
+0

Первое, что нужно отметить: для условия цикла рассогласования. еще один 'scanf()' необходим в/из стороны цикла. –

+0

'sum [1]' недопустимо, так как 'bar [10]' –

+0

Это не компилируемый код, но помимо этой проблемы вы пытаетесь суммировать целочисленный эквивалент значения 'char', которое ** не ** то же самое, что и целое число. Если вы не знаете, что это значит, выполните оператор 'printf()' во втором цикле 'for' и распечатайте значение' bar [i] '. –

ответ

0

CORRECTIONS

  1. изменение голец бар [10] для Int бар [10], потому что вы только обработка intergers
  2. Массив индексов начинаются с 0 и заканчивается в SIZEOFARRAY-1
  3. примитивы, такие как int, 10, переменные не могут передаваться с использованием индексов, как это было сделано в sum[1] == bar[10]. здесь sum - это просто тип int, где bar - это массив целых чисел.
  4. логика, чтобы проверить последнее, но 2 цифры и десятой цифры штрих-кода

    int secondDigit = sum%100; // for 189 this resturns 89 
    secondDigit = secondDigit/10 // for 89 this return 8 
    
    if(secondDigit == bar[9]) // see SIZEOFARRAY which is 10 - 1 = 9 will be the last array element. 
    { 
        // as you wanted display the barcode. 
    } 
    
0

Здесь сумма представляет собой целое число не является массивом.

Я рассматриваю ваш конкретный случай, чтобы добавить 9 цифр. Так как сумма 9 цифр не может пересечь 81. Вторая цифра будет

int secondDigit = sum /10 ; 

Если проверить это с помощью панели [9], вы получите ответ. Необходимо отметить, что десятая цифра в массиве - это массив [10-1], поскольку индекс начинается с нуля.

Вам нужно просуммировать от 0-го индекса по 8 индексу для расчета суммы 9 цифр

for(i=0;i<9;i++) { 
     sum += bar[i]; 
    } 
+0

говорят, что штрих-код 9999999991 первые девять цифр будут добавлены к 81, а 10-я цифра, которая равна 1, равна второй цифре суммы (81), прежде чем штрих-код будет действителен. но если я сделаю то, что вы сказали мне, что будет 81/10 = 8.1 = 8 (b/c int)? не 1. – user4679417

+0

Я вычислил вторую цифру из места устройства. Если вы хотите использовать вторую цифру, используйте secondDigit = sum% 10. по модулю оператора. А также целочисленное деление приведет к целому числу, не являющемуся float. Таким образом, 81/10 будет равно 8, так как вы объявили сумму как целое. – Knight71

0

1] Вы получили три ошибки в коде, вам нужно взять моды (%), чтобы сократить второй разряд суммы.

2] Вы не читаете 10-цифру от считывателя штрих-кода

3] бар [10] не десятая цифра. Его бар [9], как индексы начинаются с 0 в с

кроме этого, некоторые предложения ниже

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

Я бы ограничил количество возвратов к одному, сохранив статус возврата в переменной. Это делает код более читаемым.

Я хотел бы предложить следующее

#include <stdio.h> 

int main(void) 
{ 
    int sum = 0,i; 
    char bar[10]; 

    for(i = 0; i < 9; i++) 
    { 
     scanf("%d", &bar[i]); 
     sum += bar[i]; 
    } 

    scanf("%d", &bar[i]); 

    if((sum % 10) == bar[9 ]) 
    { 
     return 1; 
    } 

    return 0; 

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