Почему при вводе любого числа от 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;
}
}