singlepost

вопрос по С++ << На главную или назад  

строго не судить) по с++ я только вчера написал HelloWorld. вопрос такой:

юзаю Dev-C++
есть простое консольное приложение
функция должна выводить список процессов. она выводит, но почему то при поиске в списке процесса firefox.exe она ничего не находит. т.е почему то не выполняетсяif (pe.szExeFile=="firefox.exe")
я понимаю что это возможно разные классы\кодировки.. но не могу это исправить. гуглить даже не знаю по какому вопросу.

#include <stdio.h>
#include <windows.h>
#include <Tlhelp32.h>

void ProcessList()
{
HANDLE ps;
ps=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
pe.dwSize=sizeof(PROCESSENTRY32);

int i;
i=0;

if (Process32First(ps,&pe))
do
{

printf("%s – %d\n",pe.szExeFile,i++);
if (pe.szExeFile=="firefox.exe") printf("-=-=-=-=-=-=-=-=\n");

}
while (Process32Next(ps,&pe));

CloseHandle(ps);
};

18 ответов в теме “вопрос по С++”

  1. 18
    Глеб Загребалов ответил:

    Нет языка "Visual С++". Visual Studio – это среда разработки, батенька. Отличается большим количеством нонстандартной хрени, MFC и дотнетом. А еще там можно писать void main().

  2. 17
    Александр Сидорович ответил:

    давно назрел вопрос, чем отличается язык С++ от Visual С++ (консоль)?

  3. 16
    Александр Сидорович ответил:

    Спасибо,всё понял, надо было просто дописать в цикл fahr=fahr+step.

  4. 15
    Дмитрий Мамонтов ответил:

    Нет. В цикле забыт fahr++;

  5. 14
    Александр Сидорович ответил:

    Задача:вывести две таблицы температур по Фаренгейту и Цельсию
    Решение:
    // Programm 2.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include <conio.h>

    int _tmain(int argc, _TCHAR* argv[])
    {
    int lower,upper,step;
    float fahr,cels;
    lower=0;
    upper=300;
    step=20;
    fahr=lower;
    while(fahr <= upper)
    {
    cels=(5.0/9.0)*(fahr-32.0);
    printf("%4.0f %6.1f\n",fahr,cels);
    }
    _getch();
    }

    Появляются две ошибки:
    warning C4244: '=' : conversion from 'int' to 'float', possible loss of data
    warning C4244: '=' : conversion from 'double' to 'float', possible loss of data

    Вопрос: правильно ли я решил задачу и как избавиться от ошибок, когда я запускаю прогу появляется какой-то бесконечный цикл.

  6. 13
    Алексей Бозняков ответил:

    Читай выше. Тут делокак бы не в приоритетах а то что в выражении , изменяется несколько раз переменная, что в стандарте описано как the behavior is unspecified . Хм всё ложитcя на рукиhttp:компилятора.
    Более подробно//alenacpp.blogspot.com/2005/11/sequence-points.html
    И //blog.sjinks.org.ua/c-cpp/537-how-much-is-the-...

  7. 12
    Павел Акулов ответил:

    На MSVS ответ получается 12, видимо префиксные операции имеют самый высокий приоритет. В gcc возможно твое выражение интерпретируется как 4+(3+3), поэтому получается 10. Различие компиляторов очевидно :)

  8. 11
    Алексей Бозняков ответил:

    Всё выяснил.
    Except where noted, the order of evaluation of operands of individual operators and subexpressions of indi-
    vidual expressions, and the order in which side effects take place, is unspecified.53) Between the previous
    and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
    of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
    The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
    expression; otherwise the behavior is undefined. [Example:
    // the behavior is unspecified
    i = v[i++];
    // i becomes 9
    i = 7, i++, i++;
    // the behavior is unspecified
    i = ++i + 1;
    // the value of i is incremented
    i = i + 1;

  9. 10
    Алексей Бозняков ответил:

    Ну я выше написал что я так же предположил. Но если теперьsum=(++i)+(++i)+(++i) предположение станет не верным ибо получается ответ 10. а не 12.
    Компилятор gcc 4.3.3 Может кто-нибудь проверит на других компилляторах

  10. 9
    Павел Акулов ответил:

    Все правильно: инкремент выполняется перед сложением 2 раза, если разложить по шагам, получается выражение типа:

    1. i=1
    ++i
    2. i=2
    ++i
    3. i=3
    i+i
    4. sum=6

  11. 8
    Павел Акулов ответил:

    А во втором случае у меня никак не получается 10 :-/. Ответ вроде 12 должен быть… Ну если еще есть вопросы, поробуй так:

    #include <iostream>
    #include <conio.h>
    using namespace std;

    int main()
    {
    int sum=0,i=1;
    ++i;
    cout << "sum = " << sum<<endl<<"i="<<i<<endl;
    getch();
    ++i;
    cout << "sum = " << sum<<endl<<"i="<<i<<endl;
    getch();
    sum=i+i;
    cout << "sum = " << sum<<endl<<"i="<<i<<endl;
    getch();
    return 0;
    }

  12. 7
    Алексей Бозняков ответил:

    Решил не создавать новую тему.Вообщем есть вопросец насчёт пост, пре инкрементов.
    Код
    #include <iostream>
    using namespace std;
    int main()
    {

    int sum=0,i=1;
    sum=(++i)+(++i);
    cout << "sum = " << sum<<endl<<"i="<<i<<endl;
    return 0;
    }

    В результате выводит
    sum = 6
    i=3

    Я не ожидал такого ответа. А собсвенно ожидал
    sum=5
    i=3
    Собсвенно надумал на одно единсвенное обьснения сего. Что мол gcc 4.3.3 упрощает для себя это выражение тоесть сначало делает два раза операцию постинкремента а дальше просто напросто умножает на 2. Хм типо наподобие (1+1)+(1+1)=(1+1)*2 Моё предположение оказалось не верным. Так как
    int sum=0, i=1;
    sum=(++i)+(++i)+(++i)
    Выдаёт
    sum = 10
    i=4
    Не понимаю почему, ведь должно получится
    sum=2+3+4=9
    i=4

    Кто знает почему, поделитесь знаниями. Жаль ассемблер не знаю.

  13. 6
    Никита Токарчук ответил:

    нашел WinApi функцию )

    if (CompareString(LOCALE_NEUTRAL,0,pe.szExeFile,-1,"firefox.exe",-1)==CSTR_EQUAL) printf("wakwawawka");

    так сработало :D

    _
    согласен что так легче:
    if (!strcmp(pe.szExeFile,"firefox.exe")) printf("wawawaw");

    спасибо, разобрался

  14. 5
    Никита Токарчук ответил:

    да) я и понял что странно, потому что помню из php что str ищет подстроку в строке. и чтобы точно сравнить ттам надо повозюкаться )

  15. 4
    Дмитрий Мамонтов ответил:

    strcmp, strwcmp вроде сравнивает

  16. 3
    Павел Акулов ответил:

    а, перепутал немного: wcscmp используй

  17. 2
    Никита Токарчук ответил:

    интересно.. а strstr можно сравнивать разные типы строк? потому что в мелкософтовской Visual Studio сейчас смотрел там тип szExeFile WCHAR

  18. 1
    Павел Акулов ответил:

    в С++ невозможно сравнить две строки с помощью оператора ==. Можно использовать стандартную библиотечную функцию strstr для поиска нужного названия процесса

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.