• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите Новичку

  • Автор темы Guest
  • Дата начала
G

Guest

Здравствуйте уважаемые знатоки)
В наличии имеется простая программа, но я к сожалению не совсем понимаю что она делает (думаю она преобразовывает набор чисел в код). Если кому не трудно, опишите мне все строки как можно подробней. Но можно и просто неизвестные мне команды, их я подчеркну.
Программа из немецкой школы.

#include <stdio.h>
main() {
int i;
int n=0;
char cfeld[41];
printf("Bitte Zeichenkette eingeben: ");
gets(cfeld);
for (i=0;cfeld!=0;i++)
{
n=n^cfeld;
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
system("pause");
}

Более простые решения приветствуются)
 
L

lazybiz

Программа считает что-то типа контрольной суммы строки, путем операции "исключающее или" - оно же "Сложение по модулю 2" или "XOR" (операция "^" в С++).

n = 0;
для каждого символа строки: n = n ^ следующий символ

можно немного упростить написав: n ^= следующий символ - идентично предыдущей записи
 
V

Vadik(R)

gets(cfeld);
for (i=0;cfeld!=0;i++)
{
n=n^cfeld;
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
1. Читает строку
2. Цикл for. Так как строка "сишная", то он идёт до тех пор, пока не будет достигнут нуль-символ строки (конец строки по сути)
3. Сложение по модулю 2 с очередным символом строки
4. Вывод строки на экран
 
A

Araneus

Возник вопрос, почему вылазит ошибка на строке system("pause")?

Поэтому привожу комментарии и упрощение в коде с использованием функции getch();


C++:
//Подключение библиотеки, содержащей функции работы со строками printf(), gets()
#include <stdio.h>
//Подключение библиотеки, содержащей функцию getch() - обычно используеться для
//того, чтобы считать введенный символ, но будет использоваться для того, чтобы
//задержать инфу на экране
#include <conio.h>
main()
{
//Знадание начального значения контрольной суммы
int n=0;
//обьявление переменной в виде строки из 41 символа
char cfeld[41];
// Выводит "Пожалуйста, введите строку:"
printf("Bitte Zeichenkette eingeben: ");
//Записывает введенную строку в переменную cfeld
gets(cfeld);
//Цыкл, раборающий пока не будет достигнут конец строки
for (int i=0;cfeld[i]!=0;i++)
{
//Выполнение операции "сложение по модулю 2" текущего
//значения контрольной суммы и текущего элемента строки
n^=cfeld[i];
}
//Выводит на экран "У строки _____ контрольная сумма _____"
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
//Задерживает информацию на экрае до первого нажатия кнопки
getch();
}
 
R

Romashkinu

Не помогает
Пишет E2268 Call to undefined function 'system'
Может это быть из-за того, что компилирую в Embarcadero RAD Studio XE?
Используй Borland C++ 3.1, всё работает.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Результат</div></div><div class="sp-body"><div class="sp-content">
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!