Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.90
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
#1

что то вроде программки,которая проверяет Hosts и лечит - C++

29.10.2009, 19:14. Просмотров 7083. Ответов 99
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main (){
 
int c=0;
FILE *f=fopen("C:\WINDOWS\system32\drivers\etc\hosts", "a");
 
while((c=getc(f))!=EOF){
 
    if(c!="127.0.0.1 localhost"){
        cout<<"File hosts is infected";
f = fopen("C:\WINDOWS\system32\drivers\etc\hosts", "w");
fputs("127.0.0.1 localhost", f);
    }
}
 
fclose(f);
 
}
это мой код,вот на этом месте
if(c!="127.0.0.1 localhost")
я на этом месте не знаю как поступить
надо написать код,ктороый если находит другие строки кроме заводских строк-должен удалять их...как сделать?

Добавлено через 4 минуты
вопрос некорректно задал
в файле есть некий текст,определить,если кроме этого текста есть и другие слова,то удалить весь текст и добавить
127.0.0.1 loaclhost
это мой алгоритмн
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2009, 19:14     что то вроде программки,которая проверяет Hosts и лечит
Посмотрите здесь:

Написать функцию которая проверяет кратность двух чисел C++
Написать программу которая по заданному n проверяет число на палиндром C++
Написать функцию которая проверяет на уникальность каждый номер C++
Составьте фрагмент программы которая проверяет делится ли введенное число на 15 C++
Написать функцию, которая проверяет, является ли переданное ей число простым? C++
C++ Написать программу, которая проверяет, является ли год високосным
Напишите функцию, которая проверяет, отсортирован ли массив вещественных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:23     что то вроде программки,которая проверяет Hosts и лечит #81
Подсказка
C++
1
2
3
4
5
6
7
8
9
10
int n = 0;
 
while((ch = getc(file) != EOF){
  if(str[n] != ch){
    std::cout << "We all die!" << std::endl;
    goto DEATH;
  }
 
  ++n;
}
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
04.11.2009, 21:27  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #82
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 a=strlen(str);
  while((ch = getc(hosts)) != EOF){
 
      a++;
      if(ch==str[a]){
 
std::cout<<"OK\n";
 
break;
}
      else if(ch!=str[a]) {std::cout<<"no\n";
      break;
      }
 
 
  }
что не так?Снова NO!!!!

Добавлено через 1 минуту
CyBOSSeR, goto?это что то вроде break....оооо гото выводит прогу из всех циклов,а break только из полседнего?или наоборот?и что за death

Добавлено через 1 минуту
CyBOSSeR, Error 2 error C2094: label 'DEATH' was undefined c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 61 Hosts reader
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:33     что то вроде программки,которая проверяет Hosts и лечит #83
C++
1
a=strlen(str);
Это не верно! Изначально а должно ровняться 0.

Насчет goto DEATH - это шутка, не запаривайся. Перепишу свой код без шуток.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char ch;
int n = 0;
 
while((ch = getc(file) != EOF){
  if(ch == str[n]){
    std::cout << "Hosts infected" << std::endl;
    // здесь перезаписываем файл
    return 0;
  }
 
  n = n + 1;
}
 
std::cout << "Hosts not infected" << std::endl;
return 0;
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
04.11.2009, 21:44  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #84
CyBOSSeR, тоже самое.....

Добавлено через 3 минуты
я написал в ИФ-е break теперь один раз выводится...а когда ввел твой код много раз выводилось....еще дописал else

Добавлено через 1 минуту
CyBOSSeR, и еще убрал return-ы потому что system("pause") не работал

Добавлено через 1 минуту
кстати вот значение чара
C++
1
 char* str = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
может тут ошибки какие то?
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:48     что то вроде программки,которая проверяет Hosts и лечит #85
Дай твой код, я проверю.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
04.11.2009, 22:20  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #86
код
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<locale.h>
#include<stdio.h>

int main()
{
setlocale(LC_ALL, "Russian");

char str[800] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n# 102.54.94.97 rhino.acme.com # исходный сервер\n# 38.25.63.10 x.acme.com # узел клиента x\n\n127.0.0.1 localhost";
FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts", "r");

if(!hosts){
perror("Не удалось открыть файл hosts");
return 0;
}

char ch;

int n = 0;
int a=0;



while((ch = getc(hosts)) != EOF){
if(ch == str[n]){
std::cout << "Hosts infected" << std::endl;
// здесь перезаписываем файл
break;
}

n = n + 1;
}

std::cout << "Hosts not infected" << std::endl;












fclose(hosts);
system("pause");
return 0;
}


Добавлено через 14 минут
CyBOSSeR, ну что?..совсем нет что ли вариантов?
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 22:37     что то вроде программки,которая проверяет Hosts и лечит #87
Молодец, ты добился своего!
Исходник (чуть поправленный твой):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <locale>
#include<stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts\n");
    system("pause");
    return 0;
  }
 
  int ch;
 
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if((char)ch != str[n]){
      printf("Hosts инфицирован\n");
      
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
Только полностью скопируй его себе
А вот содержание файла hosts
Код
# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999
#
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.
#
# Этот файл содержит сопоставления IP-адресов именам узлов.
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен
# находиться в первом столбце, за ним должно следовать соответствующее имя.
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.
#
# Кроме того, в некоторых строках могут быть вставлены комментарии 
# (такие, как эта строка), они должны следовать за именем узла и отделяться
# от него символом '#'.
#
# Например:
#
#      102.54.94.97     rhino.acme.com          # исходный сервер
#       38.25.63.10     x.acme.com              # узел клиента x

127.0.0.1       localhost
Потести его.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
04.11.2009, 22:52  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #88
CyBOSSeR, спасибо большое,вот ххотел чеерз весы прибавить тебе,но не получется,хочу сказать ПРИГИГАНТСКОЕ СПАСИБО
ты мне очень помог,и дал понять некоторые принципы программирования!!!спасибо,вот только это не понял

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
(char)ch
?Оо что такое

Добавлено через 8 минут
ээ снова не то...написал в файл какие то цифры,что бы от чара отличлось,но говорит не инфицирован
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 23:27     что то вроде программки,которая проверяет Hosts и лечит #89
Да какие проблемы! Не за что!
А насчет этого
C++
1
(char)ch
Это называется явное преобразование типа.
Дело вот в чем:
C++
1
(char)ch != str[n]
Смотри... ch у нас является переменной типа int. А str[n] имеет тип char. Это совершенно разные типы.
Если бы мы написали так:
C++
1
ch != str[n]
получилось бы что мы сравнивали char с int, т.е. помидоры с яблоками.
Нам надо привести переменную ch к типу char или str[n] к типу int, чтобы мы могли их сравнить. Для этого нам надо использовать конструкцию вида
C++
1
(type)varible
, где variable (ch) - переменная некоего типа, которую необходимо привести к другому типу, type(char) - тип к которому необходимо привести переменную variable.
Это, как раз мы и сделали: привели переменную ch типа int к типу char.
Вот такая арифметика.
На самом деле про преобразования типов (да и просто про типы), лучше почитать в литературе, потому что с этой темой связано много различных вопросов.
Явное преобразование типа, неявное преобразование типа, потеря информации при приведении - вот далеко не полный перечень вопросов, связанных с данной темой.

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

Добавлено через 6 минут
Код
# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999
#
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.
#
# Этот файл содержит сопоставления IP-адресов именам узлов.
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен
# находиться в первом столбце, за ним должно следовать соответствующее имя.
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.
#
# Кроме [B][U]3[/U][/B]того, в некоторых строках могут быть вставлены комментарии 
# (такие, как эта строка), они должны следовать за именем узла и отделяться
# от него символом '#'.
#
# Например:
#
#      102.54.94.97     rhino.acme.com          # исходный сервер
#       38.25.63.10     x.acme.com              # узел клиента x

127.0.0.1       localhost
Жирным и подчеркивание выделено изменение которое я сделал.
Результат работы программы:
Код
Hosts инфицирован
Для продолжения нажмите любую клавишу . . .
Проверь все тщательно.

Добавлено через 10 минут
И еще небольшое изменение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <locale>
#include <stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
Добавлено через 7 минут
Изменения касаются ситуации, когда в файле количество символов больше, чем количество символов в нашей строке.
Предположим в файле 5 символов ("abcde"), а в строке str 3("abc").
Когда мы считаем 4-ый символ из файла ('d'), n будет равно 3, а str[n] = '\0', т.е. мы уже вышли за пределы строки str. А это уже свидетельствует о том, что файл инфицирован, т.к. в файле символов больше, чем в строке!
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
05.11.2009, 18:45  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #90
все работаетспасибо еще раз

Добавлено через 6 минут
геморпродолжается...поменял файл,гвоорит не инфицирован
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
      break;
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
    else if((char)ch == str[n] ){   printf("Hosts не инфицирован\n");
    break;
    }
    ++n;
  }
 
 
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 19:41     что то вроде программки,которая проверяет Hosts и лечит #91
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...
while((ch = getc(hosts)) != EOF){
  if(n >= strlenght || (char)ch != str[n] ){
    printf("Hosts инфицирован\n");
          hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
          fputs(str, hosts);
      break;  // <<---- 1. Этот break для чего?
 
      system("pause");
      fclose(hosts);
      return 0;
  }
  
  else if((char)ch == str[n])  // 2. Для чего эта проверка?
  {
    printf("Hosts не инфицирован\n");
    break;
  }
  
  ++n;
}
//...
Ответь на два вопроса, помеченных в исходнике.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
05.11.2009, 20:26  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #92
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
break; // <<---- 1. Этот break для чего?
есле его не писать до выводит много раз ИНФИЦИРОВАН пока не достигнут конец файла

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
else if((char)ch == str[n]) // 2. Для чего эта проверка?
потому то если будет инфицирован.то все равно выводит не инфицирован

Добавлено через 2 минуты
то есть выводит и ИНФИЦИРОВАН и НЕ ИНФИЦИРОВАН
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 20:52     что то вроде программки,которая проверяет Hosts и лечит #93
Вот правильный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
while((ch = getc(hosts)) != EOF){
  if(n >= strlenght || (char)ch != str[n] ){
    printf("Hosts инфицирован\n");
    
    fclose(hosts); // перед тем как заново открывать, нужно его закрыть
    
    hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
 
    if(!hosts){ // Обязательно нужно проверять открылся ли файл
      printf("Не удалось открыть файл для записи");
      
      system("pause");
      return;
    }
    
    fputs(str, hosts);
 
    fclose(hosts);
    system("pause");
    
    return 0;
  }
  
  ++n;
}
Добавлено через 2 минуты
Цитата Сообщение от МедведЪ Посмотреть сообщение
сле его не писать до выводит много раз ИНФИЦИРОВАН пока не достигнут конец файла
Это невозможно. Потому что:
C++
1
2
3
4
5
6
7
//...
if(n >= strlenght || (char)ch != str[n] ){
//...
system("pause");
fclose(hosts);
return 0; // Здесь программа завершится
// ...
Добавлено через 2 минуты
Далее.
C++
1
2
3
4
else if((char)ch == str[n]){
  printf("Hosts не инфицирован\n");
  break;
}
В цикле while программа будет до х..на раз выводить сообщение "Hosts не инфицирован".
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
05.11.2009, 20:54  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #94
CyBOSSeR, я же не выдумываю....говорю то что у меня....хм...давай ты весь код,весь,напиши,протестируй,а потом кинь сюдаможет у моего компилятора геморой с мозгом
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 21:02     что то вроде программки,которая проверяет Hosts и лечит #95
Вот исходник весь, все работает как надо. Проверяй.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <locale>
#include <stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
 
      hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
 
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
      fputs(str, hosts);
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
05.11.2009, 21:07  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #96
CyBOSSeR, джааанполучилось!!!!!!!СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 21:14     что то вроде программки,которая проверяет Hosts и лечит #97
Не за что! Подумай над расширением функционала программы.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
05.11.2009, 21:47  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #98
CyBOSSeR, конечно,щас добавлю case-ы,ну меню,что потом можно?

Добавлено через 2 минуты
какие команды для проги можно написать?щас пишу команду Проверка,ну что еще раз проверила.

Добавлено через 3 минуты
и еще у меня вопрос,скажем там в файле идет перенаправка на другой сайт,то есть надо вывести на экран определенное место файла,возмоно такое?скажем там так
127,0,0,1 vkontakte-выводит у вас было заблокирован сайт vkontakte.ru
89.50.55.888 vkontakte-выводит у вас могли уксть пароль

Добавлено через 19 минут
теперь ошибки с командамихочу чтобы при выводе cmd выполнялась какая то команда
вот ошибки
Error 2 error C2450: switch expression of type 'std::string' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 39 Hosts reader
Error 4 error C2015: too many characters in constant c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
Error 5 error C2046: illegal case c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
using namespace std;
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
  string cmd;
 cout<<"Для того что бы увидеть команды введите \"showcmd\"";
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
     
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
  printf("Hosts инфицирован!\n");
  cin>>cmd;
 
switch(cmd);
case 'clear':{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";}
             break;
 
 
    
 
 
 
 
 
 
 
      ////////////////
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
 
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}


Добавлено через 24 секунды
теперь ошибки с командамихочу чтобы при выводе cmd выполнялась какая то команда
вот ошибки
Error 2 error C2450: switch expression of type 'std::string' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 39 Hosts reader
Error 4 error C2015: too many characters in constant c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
Error 5 error C2046: illegal case c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
using namespace std;
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
  string cmd;
 cout<<"Для того что бы увидеть команды введите \"showcmd\"";
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
     
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
  printf("Hosts инфицирован!\n");
  cin>>cmd;
 
switch(cmd);
case 'clear':{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";}
             break;
 
 
    
 
 
 
 
 
 
 
      ////////////////
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
 
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}


Добавлено через 4 минуты
исправил,вместо 'clear' написал "clear",но все же не может со стрингом ии же с чаром работать

Добавлено через 2 минуты
вместо string написал int,вроде не орет,но теперь не правильно схему написал,illtgal case где ошибка
C++
1
2
3
4
5
6
  switch(cmd);{
case"clear":{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";
                 break;}
          }
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.11.2009, 02:25     что то вроде программки,которая проверяет Hosts и лечит #99
МедведЪ, вижу большую кучу ошибок.
К сожалению в ближайшие недели две помогать тебе не смогу - служебно/учебные дела.
Ты пока пробуй методом проб и ошибок расширить функционал.
А потом мы с тобой вместе доработаем.
Договорились?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2009, 13:19     что то вроде программки,которая проверяет Hosts и лечит
Еще ссылки по теме:

Напишите функцию, которая проверяет, отсортирован ли массив C++
Нужна программа которая проверяет, является ли число простым C++
Составить программу, которая проверяет число на четность C++
C++ написать программу которая проверяет , находится ли конкретный символ в строке ?
C++ Написать программу, которая проверяет удачливость билета

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
06.11.2009, 13:19  [ТС]     что то вроде программки,которая проверяет Hosts и лечит #100
хорошо,но мог бы щас код вылоить
Yandex
Объявления
06.11.2009, 13:19     что то вроде программки,которая проверяет Hosts и лечит
Ответ Создать тему
Опции темы

Текущее время: 19:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru