关键词:
【中文标题】为啥这段代码在第二行写输入?【英文标题】:Why does this code write input on second line?为什么这段代码在第二行写输入? 【发布时间】:2020-09-08 07:48:18 【问题描述】:#include <stdio.h>
#include <string.h>
void main()
FILE* fp;
char line[1024];
char filename[1024];
int length;
int counter=0;
while (1)
// fopen(filename, "w");
int op = 0;
printf("1. new file");
scanf("%d", &op);
switch (op)
case -1: break;
case 1:
printf("filename>>");
scanf("%s", filename);
length = strlen(filename);
printf("length = %ld \n", strlen(filename));
filename[length] = '.';
filename[length + 1] = 't';
filename[length + 2] = 'x';
filename[length + 3] = 't';
filename[length + 4] = '\0';
fp=fopen(filename, "w");
while (fgets(line, sizeof line, stdin) != NULL)
if (line[0] == 'q' || line[0] == 'Q')
printf("end of line \n");
fclose(fp);
break;
else
fputs(line, fp);
我制作了这段代码来制作我想要的文本文件。 但问题是, 当我运行这个程序时,它从第二行写入输入,而不是第一行。
为什么会这样? 我想从第一行写输入。 如何更改此代码以在第一行编写?
【问题讨论】:
我读过,但我不能完全理解。 【参考方案1】:可能的原因是您在标准输入上的 scanf 之后使用 fgets。
见Using scanf and fgets in the same program?。
【讨论】:
【参考方案2】:scanf("%s", filename);
当您从键盘输入文件名时,您输入文件名,然后按 ENTER。 scanf
函数读取 filename
但不使用 ENTER 字符。然后当你使用fgets
时,它会读取这个 ENTER 字符,然后在你的文件中写入一个空行。
为了解决这个问题,你可以在scanf("%s", filename);
之后使用getchar()
来消耗回车符。您应该在scanf
函数中的%s
之前添加1023
:Disadvantages of scanf。
scanf("%1023s", filename);
getchar();
或者您可以使用fgets
代替:
fgets(filename, sizeof(filename), stdin);
还有一点,switch
语句中的break
并不能帮助您退出第一个while
循环(while (1) ...
)。您应该使用一个条件来退出此循环,例如:
char ch = 'a';
while (ch != 'q')
...
switch (op)
case -1: ch = 'q'; break; // type -1 will exit the first while loop.
switch
应该有 default
例外情况。
switch (op)
...
default:
// handle the exception here.
【讨论】:
为啥我的平移手势只能在第二次输入后识别事件?
】为啥我的平移手势只能在第二次输入后识别事件?【英文标题】:Whydoesmypangestureonlyrecognizetheeventafterthesecondinput?为什么我的平移手势只能在第二次输入后识别事件?【发布时间】:2015-12-2705:34:51【问题描述】:我设置了平移手... 查看详情
javascript,为啥在播放视频时第二行无法从第一行替换?
】javascript,为啥在播放视频时第二行无法从第一行替换?【英文标题】:javascript,whythesecondtextlinecouldn\'treplacefromfirstlinewhilethevideoisplaying?javascript,为什么在播放视频时第二行无法从第一行替换?【发布时间】:2013-04-0321:01:49【... 查看详情
在wps中,第一行字数没满,怎么把第二行的合并上来,除了在第二行开头按backspace之外
...必须要事先把它从“视图"中调出来才行。 参考技术B在第一行字尾按DEL 参考技术C以WPS 2019版本为例:关于word中如何删除空行/回车符,您可使用WPS参考下方步骤完成操作:1、打开「文字(Word」;2、点击「开始-文字工具... 查看详情
为啥按钮只有在第二次点击后才起作用? (反应)
】为啥按钮只有在第二次点击后才起作用?(反应)【英文标题】:Whybuttonworksonlyaftersecondclick?(reactjs)为什么按钮只有在第二次点击后才起作用?(反应)【发布时间】:2020-08-1908:46:14【问题描述】:我有登录按钮,如果每个输... 查看详情
为啥此代码仅在第二次运行时才起作用?
】为啥此代码仅在第二次运行时才起作用?【英文标题】:Whydoesthiscodeonlyworkthesecondtimeitisrun?为什么此代码仅在第二次运行时才起作用?【发布时间】:2021-06-0901:42:42【问题描述】:在我的地图应用程序中,当我使用除坐标(纬... 查看详情
为啥这段代码不等待输入[重复]
】为啥这段代码不等待输入[重复]【英文标题】:Whydoesthiscodenotwaitforinput[duplicate]为什么这段代码不等待输入[重复]【发布时间】:2015-11-2407:40:56【问题描述】:我希望代码停止并再次等待输入,但它运行时就像用户每次都按Enter... 查看详情
如果内容不适合视图的第一行,则 UILabel 在第二行
】如果内容不适合视图的第一行,则UILabel在第二行【英文标题】:UILabelonsecondlineifthecontentdoesn\'tfitintheview\'sfirstline【发布时间】:2017-02-2112:17:01【问题描述】:描述我的情况的最佳方式是使用图像。我所拥有的是一个包含几个UI... 查看详情
当标题在第二行中断时,正文不会溢出剪辑正确
】当标题在第二行中断时,正文不会溢出剪辑正确【英文标题】:Whenheadlinebreaksinsecondline,thebodytextdoesnotoverflowclipcorrect【发布时间】:2021-05-2500:11:38【问题描述】:如果我有一个长标题,根据字符串的长度分成两行,则正文文本... 查看详情
为啥 MapReduce 第二份工作不会排序?
】为啥MapReduce第二份工作不会排序?【英文标题】:WhyMapReducesecondjobwon\'tsort?为什么MapReduce第二份工作不会排序?【发布时间】:2019-12-1022:27:31【问题描述】:我对这段代码有一点问题,第一份工作运行良好,将每个客户的价格... 查看详情
在第二行的导航栏上添加段控制器
】在第二行的导航栏上添加段控制器【英文标题】:Addingsegmentcontrolleronnavigationbarinthesecondrow【发布时间】:2013-08-1501:11:49【问题描述】:我想在导航栏上添加一个段控制器不是作为标题,而是像这样:我该怎么做?【问题讨论... 查看详情
为啥 Spark 查询在第二次执行时运行得更快?
】为啥Spark查询在第二次执行时运行得更快?【英文标题】:WhydoesaSparkqueryrunfasterwhenit\'sexecutedasecondtime?为什么Spark查询在第二次执行时运行得更快?【发布时间】:2020-10-0719:03:10【问题描述】:我第二次运行查询时速度明显更快... 查看详情
为啥我的模型在第二个 epoch 过拟合?
】为啥我的模型在第二个epoch过拟合?【英文标题】:Whyismymodeloverfittingonthesecondepoch?为什么我的模型在第二个epoch过拟合?【发布时间】:2020-12-0323:15:54【问题描述】:我是深度学习的初学者,我正在尝试训练一个深度学习模型... 查看详情
l2-026.小字辈(代码片段)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数N(不超过100000的正整数)——简单起见,我们把家族成员从1到N编号。随后第二行给出N个编号,其中第i个编号对应... 查看详情
l2-026.小字辈(代码片段)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数N(不超过100000的正整数)——简单起见,我们把家族成员从1到N编号。随后第二行给出N个编号,其中第i个编号对应... 查看详情
题解lcis(代码片段)
题目描述 给定两个整数序列,写一个程序求它们的最长上升公共子序列。 输入格式 每个序列用两行表示,第一行是长度L,第二行是该序列。输出格式 在第一行,输出该LCIS的长度。第二行,输出该LCIS。 输入... 查看详情
如何对组进行排序,以使我在第一行中获得最大的数字,在第二行中获得最小的数字,在第三行中获得第二大的数字,依此类推
】如何对组进行排序,以使我在第一行中获得最大的数字,在第二行中获得最小的数字,在第三行中获得第二大的数字,依此类推【英文标题】:HowtosortagroupinawaythatIgetthelargestnumberinthefirstrowandsmallestinthesecondandthesecondlargestinthethir... 查看详情
为啥我的 reg ex 不捕获第二行和后续行?
】为啥我的regex不捕获第二行和后续行?【英文标题】:Whydoesmyregexnotcapture2ndandsubsequentlines?为什么我的regex不捕获第二行和后续行?【发布时间】:2019-04-0114:55:10【问题描述】:更新我尝试将RegexOptions.Singleline添加到我的regex选项... 查看详情
为啥 uibmodals 只能在第二次调用时拖动?
】为啥uibmodals只能在第二次调用时拖动?【英文标题】:Whyareuibmodalsonlydraggableonsecondcall?为什么uibmodals只能在第二次调用时拖动?【发布时间】:2020-02-0710:39:44【问题描述】:我将.draggable()放在了我的模态框上,但它们仅适用于... 查看详情