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

Исправить ошибку в коде для сравнения строк - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Преобразование кода со статическим выделением памяти в динамическое http://www.cyberforum.ru/cpp-beginners/thread1065760.html
имеется код #include "stdafx.h" #include <iostream> using namespace std; int main() { const int n=100; const int m=100;
C++ Вычислить значение y в зависимости от выбранной функции f(x), аргумент которой определяется из поставленного условия. Вычислить значение y в зависимости от выбранной функции f(x), аргумент которой определяется из поставленного условия. Возможные значения функции f(x): 2x, x2, х/3. Предусмотреть вывод сообщений, показывающих, при каком условии и с какой функцией производились вычисления у. http://www.cyberforum.ru/cpp-beginners/thread1065747.html
C++ Сравнение float
void setup() { Serial.begin(9600); float azimuth = 0; float course = 180; float a = sin((azimuth - course)*PI/180.0); Serial.print(a); Serial.print(" - "); Serial.print(azimuth); Serial.print("/"); Serial.print(course);
«Обработка двухмерных массивов» C++
Прошу помочь.. пожалуйста простым способом очень нужно! заранее спасибо Найти наибольший элемент главной диагонали матрицы А(4х4) и вывести на экран все строку, в которой он находится. Буду очень благодарен
C++ Работа с функциями, возвращающими значения. Передача параметров по значению http://www.cyberforum.ru/cpp-beginners/thread1065723.html
Помогите переделать задачу по ссылкам очень нужно!!!!! Даны длины a, b и c сторон некоторого треугольника. Найти медианы треугольника, сторонами которого являются медианы исходного треугольника. (Замечание: длина медианы проведенной к стороне a, равна 0.5*sqrt(2*(b^2)+2*(c^2)-(a^2)) .) #include <iostream> #include <math.h> #include <conio.h> using namespace std;
C++ Или я дурак, или компилятор смеется, вот только чувствую я дурак) Ввожу 1939 совершенно верно, вожу какое либо число тоже совершенно верно. Не отрабатывает else { } Подскажите чтоль.. //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h> #include <stdio.h> #include <math.h> #include <conio.h> #pragma hdrstop подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.01.2014, 22:40     Исправить ошибку в коде для сравнения строк
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath);
 
int main(){
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 
 
//Поскольку sPath и sExt и sEXT одинаковы во всех вызовах GetFileList, их можно было бы сделать
//глобальными, но я так оставил. 
//Сюда пишешь папку, в которой надо вести поиск
        char sPath[MAX_PATH]= "E:\\vso_moio";
 
 
 
//Обратить  внимание на размер массива!
        GetFileList(sPath);
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
      printf("rez= %d\n", rez);
  //system ("PAUSE");
      getchar ();
}
 
void GetFileList(LPTSTR sPath) {
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
// sPath[strlen(sPath) - strlen(strstr(sPath,"*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 
//22.11.12 00:02
//Да и вообще нахрен оно надо, лучше так записать:
//по-любому звёздочка есть в строке, мы же делали конкантекацию строк выше!     
 *(strstr(sPath,"*.*"))= '\0';
 
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
     
 
 
     strcat(sPath,pFILEDATA.cFileName);
     strcat(sPath, "\\");
     //CharToOem(sPath,sPath);
     printf("\n==%s\n",sPath);
     sPath[strlen(sPath)- 1]= '\0'; 
     rez++;
     //OemToChar(sPath,sPath);
 
     GetFileList(sPath);
 
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
 
   }
   else {
      //Если не будем использовать CharToOem() то на экране русский шрифт каракулями выйдет
      //CharToOem(sPath,sPath);
      printf("%s",sPath);
      //OemToChar(sPath,sPath);
      //CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
  FindClose (hFile);
 }
}
 
Текущее время: 22:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru