Почему при вводе любого числа от 0 до 3 выводится explorer?

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

void GetProg(TCHAR szCMDline[]) 
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = TRUE;
    BOOL bExitSt = CreateProcess (NULL, szCMDline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

    if(bExitSt)
    {
        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle (pi.hThread);
        CloseHandle (pi.hProcess);
    }
}

int main(int argc, char* argv[])
{
    char imp=0;
    printf("\tPrint number for programm open.\n");
    printf(" 1 -- open explorer \n 2 -- open world (windows) \n 3 -- open notepad (windows) \n 0 -- exit programm\n\n");
    printf(">>>> ");
    imp = scanf("%c",&imp);
switch(imp){
    case 1:{
        GetProg(TEXT("explorer"));
        break;
    }
    case 2:{
        GetProg(TEXT("write"));
        break;
    }
    case 3:{
        GetProg(TEXT("notepad"));
        break;
    }
    case 0:{
        exit(0);
        break;
    }
}
    return 0;
}

Ответы (1 шт):

Автор решения: nomnoms12

Функция scanf возвращает количество успешно назначенных аргументов или EOF. Вы присваиваете этот результат переменной imp, и в случае успеха она всегда будет содержать значение 1. Не нужно делать это присваивание:

scanf("%c",&imp);

Также вам нужно поменять константные выражения в операторе switch на символы:

switch(imp){
    case '1':{
        GetProg(TEXT("explorer"));
        break;
    }
    case '2':{
        GetProg(TEXT("write"));
        break;
    }
    case '3':{
        GetProg(TEXT("notepad"));
        break;
    }
    case '0':{
        exit(0);
        break;
    }
}
→ Ссылка