我遇到了我创建的这个函数的问题,它是为了最小化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语句并打印“无效条目请重试”然后才能正常运行并等待用户输入内容...
有没有人知道如何解决这个问题?
谢谢
答案 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'
在循环结束时。