【问题标题】:C - yes/no prompt executes more than once [duplicate]C - 是/否提示多次执行[重复]
【发布时间】:2013-03-01 17:34:03
【问题描述】:

我正在处理一个程序的一部分,该程序处理覆盖目录中的文件。覆盖文件很容易......但显然不会提示用户是否希望覆盖文件。例如:如果我想覆盖两个文件(fileOne.txt、fileTwo.txt),我需要提示用户两次(每个文件一次)。在我当前的提示下,如果我提示用户覆盖 fileOne.txt,fileOne.txt 和 fileTwo.txt 都将被覆盖。如果有两个以上的文件要覆盖,它将只覆盖两个连续的文件。我相信这与点击“Enter”有关,但我不知道......

if(((int)getHeader.deleted - 48) == 0) {
        if(access(getHeader.file_name, F_OK) != -1) { /* File exists in directory, check for overwrite */
            printf("%s already exists. Would you like to overwrite it? (y/n)\n", getHeader.file_name);
            scanf("%c", buffer);
            while(!validResponse) {
                if(buffer[0] == 'y' || buffer[0] == 'Y') {
                    validResponse = 1;
                    printf("DO SOMETHING - Files will be overwritten\n");
                } else if(buffer[0] == 'n' || buffer[0] == 'N') {
                    validResponse = 1;
                    printf("DO SOMETHING - File will be skipped\n");
                } else {
                    printf("Invalid response... Would you like to overwrite %s? (y/n)\n", getHeader.file_name);
                    scanf("%c", buffer);
                } /* End if else */
            } /* End while */
        } /* End if */
    } /* End if */ 

【问题讨论】:

    标签: c prompt


    【解决方案1】:

    当您读取单个字符时,您会在 stdin 中留下一个换行符,您需要使用它:

    scanf("%c", buffer);
    getchar();  // consume the leftover '\n'
    

    会做,或者只做一行:

    scanf(" %c", buffer); // the space will tell it to skip any "white space" characters
    


    仅使用此处的代码 sn-p,如果在第一个提示符处输入了无效字符,它似乎会被 else 的 scanf 跳过(实际上它正在读取第一个剩余的 '\n')并且它将再次循环以获取输入。

    如果没有看到其余的代码,大概您将这一切都放在一个循环中,这就是它在 2 秒内跳过文件的原因。 ('Y',然后是'\n'

    【讨论】:

    • 另外,您可以在格式字符串中放置一个空格:scanf(" %c", buffer); - 这将告诉scanf 跳过前导空格并读取下一个 -空格字符.
    • getchar();成功了。感谢您的帮助
    • @JohnBode - 是的,有很多可能性,我也添加了你的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2021-01-18
    • 2010-11-26
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多