while循环不会停止在函数c

时间:2016-01-12 15:36:54

标签: c data-structures while-loop fgets

我遇到了我创建的这个函数的问题,它是为了最小化main函数中的代码而创建的。 (我被告知你应该在主函数中有最少量的代码)....

继承人的代码(之后详细解释了问题):

void startPrediction(struct TrieNode* root, struct TrieNode* pntr)
{
    char result[50];
    char search[256];
    char exitProg[5];

    while(1)
    {
        memset(&result[0], 0, sizeof(result));
        memset(&search[0], 0, sizeof(search));
        memset(&exitProg[0], 0, sizeof(exitProg));

        while(strlen(search) == 0)
        {
            printf("Enter: ");
            scanInput(search);

            search[strcspn(search, "\n")] = 0;

            if(strlen(search) == 0)
                printf("Invalid Entry, Please Retry!\n");
        }

        //check for a space in the word
        removeSpaces(search);

        removePunctuationAndSpecial(search);

        trieSearch(root, &pntr, search, result);

        printf("\n\n");

        wordSelectionDisplay(root, pntr, result);

        printf("Would you like to exit?? (Y/N)\n");
        printf("Enter: ");
        scanf("%s", exitProg);

        if( (exitProg[0] == 'Y') || (exitProg[0] == 'y') )
        {
            printf("Exiting...\n");
            return;
        }
        else
            printf("Continuing Program...\n");
    }
}

所有这些代码都没问题,直到询问用户是否要退出...如果他们放Y / y然后就好并且它退出,如果他们把N / n然后代码将从顶部开始while循环并通过但不停留在scanInput(search);函数,该函数只包含fgets(input, sizeof(input), stdin);代码行...

它会超过它然后进入if语句并打印“无效条目请重试”然后才能正常运行并等待用户输入内容...

有没有人知道如何解决这个问题?

谢谢

1 个答案:

答案 0 :(得分:2)

这是因为def chunk_read_CSV_to_db(database, table, filepath, chunksize, delimiter=',', index=False): start = dt.datetime.now() index_start = 1 j=0 for df in pd.read_csv(filepath, chunksize=chunksize, iterator=True, encoding='utf-8', sep=delimiter): j+=1 print '{} seconds: complete {} rows'.format((dt.datetime.now() -start).seconds, j*chunksize) df.to_sql(table, db, flavor='sqlite', if_exists='append', index=index) db = create_engine('sqlite:///store_data.db') meta = MetaData(bind=db) table_pop = Table('xrf_str_geo_ta4_1511', meta, Column('TDLINX',Integer, nullable=True), Column('GEO_ID',Integer, nullable=True), Column('PERCINCL', Numeric, nullable=True) ) chunksize = 20000 chunk_read_CSV_to_db(db,'xrf_str_geo_ta4_1511', os.path.join(fp, f9), chunksize = chunksize, delimiter='\t') scanf()留在输入缓冲区中,当你再次调用该函数时,它就像用户按下'\n'一样返回,你可能会这样做

'\n'

在循环结束时。