Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ctrl+;windows上的c中的c?_C_Windows_Eof - Fatal编程技术网

如何使用ctrl+;windows上的c中的c?

如何使用ctrl+;windows上的c中的c?,c,windows,eof,C,Windows,Eof,因此,我需要为一个程序编写一个whileloop,该程序应该向用户提示以下内容: char vector[10]; while(????){ print("Write a number"); scanf("%s",vector); } printf("Goodbye"); 当用户按下ctrl+c时,程序应该打印再见并关闭。 我很确定我不能在这种情况下使用putchar?请参阅: 取决于你所说的“放弃某事”是什么意思;在Windows cmd中: Ctrl+Z发送EOF字符,如

因此,我需要为一个程序编写一个whileloop,该程序应该向用户提示以下内容:

char vector[10];
while(????){
    print("Write a number");
    scanf("%s",vector);
}

printf("Goodbye");
当用户按下ctrl+c时,程序应该打印再见并关闭。 我很确定我不能在这种情况下使用putchar?

请参阅:

取决于你所说的“放弃某事”是什么意思;在Windows cmd中:

Ctrl+Z发送EOF字符,如果 您正在提供输入,但在其他方面可能什么也做不了

Ctrl+C通常将SIGINT发送到前台进程,前台进程应该 终止它,但程序可以按照自己的喜好进行响应-即,它们 可以捕捉到信号,然后忽略它。该命令也可以是 重新映射到其他作业(例如,对于特定程序,它不会 真正发出信号)或完全忽略

Ctrl+Break始终发送SIGBREAK,这将再次终止 进程,但与Ctrl+C不同的是,不能重新映射,但仍然可以 忽略。这可能是你需要的


我想这可能就是你想要的:

在堆栈溢出上发布与此类似的帖子:

你可能想看看。干杯

#包括
#include <windows.h>
#include <stdio.h>

static end_flag = 0;

BOOL WINAPI controlHandler(DWORD type){
    if(type == CTRL_C_EVENT){
        end_flag = 1;
        return TRUE;
    }
    return FALSE;
}

int main(){
    char vector[10];

    if (!SetConsoleCtrlHandler(controlHandler, TRUE)) {
        fprintf(stderr, "Failed SetConsoleCtrlHandler");
        return -1;
    }
    while(!end_flag){
        printf("Write a number ");
        scanf("%s",vector);
    }

    printf("Goodbye");
    return 0;
}
#包括 静态结束标志=0; 布尔WINAPI控制处理器(DWORD类型){ 如果(类型==CTRL\U C\U事件){ 结束标志=1; 返回TRUE; } 返回FALSE; } int main(){ 字符向量[10]; if(!setConsoletrlHandler(controlHandler,TRUE)){ fprintf(stderr,“失败的SetConsoleCtrlHandler”); 返回-1; } while(!end_标志){ printf(“写一个数字”); 扫描频率(“%s”,矢量); } printf(“再见”); 返回0; }

CTRL+Z版本

#include <stdio.h>

int main(){
    char vector[10];

    while(1){
        printf("Write a number ");
        if(scanf("%s", vector)==EOF)//press CTRL+Z
            break;
    }

    printf("Goodbye");
    return 0;
}
#包括
int main(){
字符向量[10];
而(1){
printf(“写一个数字”);
如果(scanf(“%s”,vector)=EOF)//按CTRL+Z
打破
}
printf(“再见”);
返回0;
}

@ajay什么是EOF字符?常量EOF是一个常量,应该不同于任何其他字符。我想我们应该使用EOF,但我只想用某种ctrl+摆脱whileloop?谢谢,练习实际上是在Linux中用ctrl+D结束whileloop,在windows上会是什么样?谢谢,这个练习实际上是在Linux中以ctrl+D结束I,在windows上有什么相同之处?谢谢,它很有效!,哎哟,对我来说太复杂了,我还有一个问题,实际上whileloop中有几行代码,我不想在用户按下ctrl+c后运行?有任何救援吗?@Tensora我认为它使用
exit(1)
而不是设置标志。ctrl+z版本工作正常,因为它现在刹车,但是它打印z^,然后用户必须按enter键一次才能退出循环。我有一些真正的问题,我的意思是,有没有办法让程序退出循环而不按回车键?@Tensora使用getch或kbhit或key status…,但在你自己做的每件事中。这是不现实的,因为没有准备就再也不行了。您需要按CTRL+C组合键并退出。