Как сканировать в двух массивов от пользователя?

голоса
0

Я относительно новый для программирования, и я должен написать функцию, которая считывает ввод от пользователя и заполнить два массива затем сравнить их. Я предполагаю, что я запутался, как читать в обоих массивах.

Это то, что я должен делать,

Написать функцию, которая сравнивает table_diff два массива целых чисел и возвращает индекс первого места они отличаются. Если массивы одинаковы, то функция должна возвращать -1 пример:

345 & 345 -> -1 (то же самое)

345 & 346 -> 2 (различаются по индексу 2)

1234 & 123 -> 3 (различаются по индексу 3)

Это то, что у меня есть, любая помощь приветствуется!

while((r = scanf(%i, &value)) != 1 && ptra < endptra)
{
     *ptra ++ = value;                      

     if (r==1)
         printf(No room after reading values\n\n);
     else if(r != EOF)
         printf(invalid char);
}   

while((r = scanf(%i\n, &value))!= 1 && ptrb < endptrb){
    *ptrb ++ = value;

    if (r==1)
        printf(No room after reading values\n\n);       
    else if(r != EOF)
        printf(invalid char);                      
}
Задан 12/11/2008 в 01:55
источник пользователем
На других языках...                            


6 ответов

голоса
1

Я думаю, что вы хотите изменить свой код на следующее:

while((r = scanf("%i", &value)) != 1 && ptra < endptra)
{
     *(ptra++) = value;                      

     if (r==1)
         printf("No room after reading values\n\n");
     else if(r != EOF)
         printf("invalid char");
}   

while((r = scanf("%i\n", &value))!= 1 && ptrb < endptrb){
    *(ptrb++) = value;

    if (r==1)
        printf("No room after reading values\n\n");       
    else if(r != EOF)
        printf("invalid char");                      
}

*Оператор имеет более высокий приоритет , чем ++.

Ответил 12/11/2008 в 02:40
источник пользователем

голоса
0

Один из способов , чтобы исправить ваши проблемы с петлями в программировании является одной из вещей , которые я узнал в одном из моих университетских курсов около 15 лет назад. То есть « инвариант цикла ».

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

Подобно:

«Первые I позиции массивов одинаковы»

Так что начните с 0 (всегда верно), и во время проверки петли первой, если первая позиция такая же. Если это правда, вы можете увеличить «я» переменной с одним. Сделайте то же самое с 2, и т.д. Таким образом, в основном переменным я определяет, какие следующий индекс будет проверяться.

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

Ответил 18/12/2008 в 10:37
источник пользователем

голоса
0

Я не думаю, что зсап работает так, как ты думаешь это работает. Трудно сказать, не видя, как вы делаете свой вклад; для того, чтобы петли, как это, я думаю, вы должны были бы быть отправки EOF (CTRL-D из стандартного ввода) после каждой записи целого числа. Если это то, как вы делаете это, то единственное, что будет аннулирована цикл является сравнение указателя. У вас есть известный максимальный размер массива? Если же, с другой стороны, ваш вклад «1234 ^ D», вы будете в конечном итоге с одной записью массива целого числа 1234, а не 1,2,3,4.

И, наконец, что если заявление выглядит, как вы пытаетесь определить, почему цикл вышел; если да, то она должна быть вне цикла.

Ответил 12/11/2008 в 17:16
источник пользователем

голоса
0

Похоже, что вам не хватает фактической проверки части. Теперь, когда вы ahve прочитать в каждом массиве, вы должны пройти через это с другим контуром и проверьте значение в каждом из них.

Ответил 12/11/2008 в 02:55
источник пользователем

голоса
0

Кроме того , у вас есть случай copy - pasteздесь. Вы делаете то же самое в два раза. Что вы делаете при этом? Напишите функцию с общим кодом и назвать его только с соответствующими параметрами.

Ответил 12/11/2008 в 02:47
источник пользователем

голоса
0

Это не реально ответить на ваш вопрос, но в вашем «пока» состоянии, вы уже проверить «г! = 1», так что в пределах блока в то время, проверяя «если (г == 1) ...» не является необходимым, и технически код недостижим.

В чем смысл этой программы? Как это выглядит сейчас, вы читаете в массив PTRA до пустой строки, затем считывается в ptrb до пустой строки ... тогда вы говорите, что нужно сравнить два, но что вы имеете в виду под этим? что результат должен быть? сравнить элемент массивов по пункту? или просто по содержанию не по позиции? нужно больше информации ...

Ответил 12/11/2008 в 02:18
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more