当用户点击'Enter'时,使用getchar()退出循环?

时间:2014-03-20 00:25:11

标签: c loops if-statement do-while

我已经阅读了很多其他堆栈溢出主题,但我仍然遇到很多麻烦。我试图使用do / while循环以及嵌套的if语句。如果要停止打印卡片,我就无法获得最后一张卡片。当“玩家”#39;命中'进入'。以太getchar()保持if语句,这样只有当用户不断按Enter键时才打印(这甚至不接近我想要的)或者只是在暂停后继续打印。

void printDeck(Card *deck, const char *faces[], const char *suits[], FILE *fp)
{
    int loop, t;
    // print the deck one card at a time

    fp = fopen("cardsprinted.txt", "w+");
    t = ftell(fp);
    char c;
    do {
        c = getchar();    
        for (loop = 0; loop < 52; loop++) {
            // print the face and suit of the card to stdout as well as file
            printf("%s of %s\n",faces[deck[loop].face],suits[deck[loop].suit]);
            fprintf(fp,"%s of %s\n",faces[deck[loop].face],suits[deck[loop].suit]);
            fseek(fp, t, SEEK_SET); // finds beginning of the file
            fseek(fp,t,SEEK_END);// finds end of file for printing

            // loop to pause for 3seconds before printing next card. 
            if ((loop % 1) == 0 && loop != 0) { 
                sleep(3);
            }
        }
    } while (c != '\n' && c != EOF);

    fclose(fp);
}

输出示例:

./slapjack
Queen of Spades
Nine of Spades
Jack of Hearts

这是我点击Enter并希望循环停止打印的地方。

Three of Hearts
Queen of Hearts
Six of Spades
Seven of Diamonds
^C

但它不起作用......

我也尝试过不使用getchar()。我想也许scanf()会更容易,但仍然没有运气。

1 个答案:

答案 0 :(得分:0)

使用while语句。

将control var设置为true

在进入之前,如果检测到set control var为false,则测试getchar

输入while循环

下面的psudocode:

controlvar = ! getchar()

while (controlvar) {
  do something
  test for end condition or getchar to set controlvar false
}