• Твой профиль заполнен на 0%. Заполни за 1 минуту, чтобы тебя нашли единомышленники и работодатели. Заполнить →

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

  • Автор темы Автор темы 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");
}

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

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

можно немного упростить написав: n ^= следующий символ - идентично предыдущей записи
 
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. Вывод строки на экран
 
Возник вопрос, почему вылазит ошибка на строке 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();
}
 
потому что надо указать тип главной функции(void main() например)
 
потому что надо указать тип главной функции(void main() например)
Не помогает
Пишет E2268 Call to undefined function 'system'
Может это быть из-за того, что компилирую в Embarcadero RAD Studio XE?
 
Не помогает
Пишет 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">
 
Всем Спасибо=)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab