首页 > 解决方案 > 一次尝试后如何停止循环?

问题描述

我在这里面临一些问题。每当我运行此代码时,它都会询问我姓名和出生日期。当我给它时,它会再次询问我,直到我按下 Ctrl+D。我希望这个过程在一段时间后停止,而是问我,你想继续吗?如果我说是,那么它会重复循环并再次问我一次。这个怎么做?我试过但失败了。

int main(void){
    const char *listing[] = {"Name", "Date of birth"};
    char data[2][51];
    int done = 0;
    FILE *fp;

    fp = fopen("/home/bilal/Documents/file.txt", "w+");
    while (!done){
        for (int i = 0; i < 2; i++){
            printf("Enter your %s: ", listing[i]);
            if (scanf(" %50[^\n]", data[i]) != 1){
                done = 1;
                break;
            }
        }
        if (!done){
            fprintf(fp, "%s %s\n", data[0], data[1]);
        }
    }
    fclose(fp);
    return 0;
}

标签: cfunctionloops

解决方案


如果我正确解释了您的帖子,在第一次提示输入姓名和 [然后] DOB 之后,您想注入“我要继续吗?” 问题。

这是重构的代码:

#include <stdio.h>

int
domore(void)
{
    char buf[51];
    int moreflg = -1;

    while (moreflg < 0) {
        printf("Shall I continue (y/n)? ");
        if (scanf(" %50[^\n]", buf) != 1)
            break;

        switch (buf[0]) {
        case 'y':
        case 'Y':
            moreflg = 1;
            break;

        case 'n':
        case 'N':
            moreflg = 0;
            break;
        }
    }

    if (moreflg < 0)
        moreflg = 0;

    return moreflg;
}

int
main(void)
{
    const char *listing[] = { "Name", "Date of birth" };
    char data[2][51];
    int done = 0;
    int again = 0;
    FILE *fp;

#if 0
    fp = fopen("/home/bilal/Documents/file.txt", "w+");
#else
    fp = fopen("/tmp/file.txt", "w+");
#endif

    while (!done) {
        if (again) {
            if (! domore())
                break;
        }
        again = 1;

        for (int i = 0; i < 2; i++) {
            printf("Enter your %s: ", listing[i]);
            if (scanf(" %50[^\n]", data[i]) != 1) {
                done = 1;
                break;
            }
        }
        if (!done) {
            fprintf(fp, "%s %s\n", data[0], data[1]);
        }
    }

    fclose(fp);

    return 0;
}

推荐阅读