2016-10-31 5 views
0

最初は、私はCとプログラミングの完全な初心者だということを指摘したかったのです。私はPCの遅延シャットダウンをスケジュールするための簡単なコンソールアプリを作ろうとしています。 は、ここに私のコードです:ANSI Cのシンプルな遅延シャットダウンアプリ、変わった奇妙なスイッチ

int main() 
{ 
    int minutes, seconds; 
    char command[50]; 
    char sa; 

    printf("(s)hutdown or (a)bort?. 0 to exit.\n"); 
    scanf("%c", &sa); 
    switch (sa) 
    { 
    case 's': 
     printf("How many minutes till shutdown\n"); 
     scanf("%d\n", &minutes); 
     seconds = minutes * 60; 
     sprintf(command, "shutdown /s /f /t %d\n", seconds); 
     system(command); 
     system("exit"); 

    case 'a': 
     sprintf(command, "shutdown /a"); 
     system(command); 
     system("exit"); 

    default: 
     printf("Bad choice."); 
     system("exit"); 
    } 

    return 0; 
} 

私の問題は、次のとおりです。コンソールを閉じる必要がありますが、それは動作しません。私は「s」を選択すると
1、および分の適切な量を書き留めと押した後system('exit')を入力します。 。私はそれを閉じるために何かを書き留めなければならない。そして、その場合でも、とにかく 'a'が実行され、遅延シャットダウンがキャンセルされます。
2. 's'または 'a'を選択すると、デフォルトのケースも実行されます。だから、私が得た結果は常に「悪い選択」で終わります。

誰かが私の(おそらく愚かな)問題で私を助けてくれますか?助けてくれてありがとう!

+0

遅延シャットダウン後、スリープを追加します。 –

+3

まず、[system '関数](https://msdn.microsoft.com/en-us/library/277bwbdz.aspx)は期待通りに動作しません。第二に、 'switch'ケースでは、それを終了するために' break'が必要です。 –

+0

休憩を完全に忘れてしまった。しかし、 'a'を選択した後も、コンソールは閉じますが、 's'を選択すると、他の入力が閉じられるのを待ちます。 –

答えて

1

システム機能が新しいシェルを起動し、そう

system("exit"); 

することを新しいシェルからちょうど出、あなたのプログラムに戻って実行制御を返します。

親シェルを削除するには、おそらくSIGHUPシグナルを送ることができます。

関連する問題