c - 一次尝试后如何停止循环?
问题描述
我在这里面临一些问题。每当我运行此代码时,它都会询问我姓名和出生日期。当我给它时,它会再次询问我,直到我按下 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;
}
解决方案
如果我正确解释了您的帖子,在第一次提示输入姓名和 [然后] 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;
}
推荐阅读
- excel - How do I create Pivot Cache using a defined range as data source without a type mismatch error
- python-3.x - How to compile .py to .exe with modules unsupported by pyinstaller?
- c++ - 是否可以在编译时连接两个 `const char *` 类型的字符串?
- javascript - 如何使用扩展运算符 Javascript 动态推送数组
- sapui5 - sapui5 无法在详细页面显示数据
- performance - Powershell TCP接收文件慢
- javascript - 什么占用更多空间:具有 2 个键或 2 个变量值的对象?哪个更好?
- python - Django 查询集任何
- excel - 如何在不使用宏的情况下从单元格中查找和删除多个单词(作为列表)
- python - OpenCV 和 Tensorflow - 检测对象并在其周围绘制框