fndurwa073

博客园 首页 新随笔 联系 订阅 管理

一、一些输入语句的笔记(注:以下一切笔记均在  截至2023.7的最新版VS测试环境下  得到并记录,并不保证之后版本不会改变,仅供个人学习了解。)

1、gets/gets_s/fgets

新版C标准库中gets函数应替换为 gets_s 或 可用fgets,相关简介如下:

---gets_s(存储位置, 读取位数)读取到\n时在其后停止,并将\n替换为\0。(又因为字符串后必须接\0,所以只能读取  定义的位数-1位,最后一位要留给\n用来换成\0。超了可能会报错)

---fgets(存储位置, 读取位数 , stdin):读到\n时在其后停止并将\n录入作为一位再在下一位添加\0 , 或  读满  定义的读取位数-1位  自动停止再把最后一位赋值为\0。(超过  定义的读取位数-1位  则会将多余的输入遗留在输入流中。)*例:定义的读取位数为101,则只读100位,第101位被赋为\0,若输入流中有101位(最后一位是\n或其他),则第101位(\n或其他)将遗留在输入流中。

2、scanf/scanf_s

scanf/scanf_s:在%s模式下只会在  \n前  停下  并在字符串后自动添加\0后录入,而将输入字符串后的\n遗留在输入流。若  直接输入\n  则会跳过并继续读取,直到读到字符,并在  读到字符串后 再遇到的  第一个\n前结束。

scanf额外特性:在%s模式下:如果超过数组长度,仍不断读取直到遇到\n并在其前停下,然后在最后添加\0,但赋值时只从头开始赋值,多余字符和\0都会被一同舍弃。

scanf_s额外特性?:在%s模式下:自动在字符串最后加上\0并算作单独一位,如果超过定义的读取位数则录入  定义的读取位数  个字符后,\0仍会被加上,但会被加在第0位,并导致原有录入数据全部丢失。输入流中剩余:实际位数 - 定义的读取位数  位将被遗留。

二、运用cmd重定向测试程序(win11环境)

*注:power shall似乎并不支持这么做。

简单案例代码:

#include <stdio.h>

int main()
{
	char a[10], b[10], outputTemplate[50];
	gets_s(outputTemplate, 50);
	gets_s(a, 10); //gets_s不会读入\n
	fgets(b, 10, stdin); //fgets读入了\n
	puts(outputTemplate); //输出完字符串后如果没换行,会自动追加换行
	printf("%s%s", a, b);
	return 0;
}

1、菜单栏:生成—>生成解决方案后,在输出控制台:生成的输出来源里  就可以看到最新动态和生成程序的位置了。(找到平时调试时生成的程序文件是一样的)


2、打开cmd,直接将生成出的.exe程序拖入,其完整路径就会录入cmd了,之后输入“<”,再拖入准备好的输入文件,此处我准备好的文件就是位于D盘的in.txt文件,其中内容:

I have a/an 
apple
pie

回车后下方两行跳出的就是将in.txt文件内容输入后输出的结果了。


3、如需输出到指定文件则在上述指令基础上,在后面再添加“>”,并拖入输出的目标文件,此处我准备的时位于D盘的out.txt(空)文件

回车后跳出等待指令,就已经执行完毕,打开输出的目标文件就能看到以下内容:

I have a/an 
applepie

4、对比两文件格式:fc ”空格“ 文件1 ”空格“ 文件2 /n

 若出现不同会列出不同部分:

总结:

本文仅仅时学习笔记和部分经验总结,内容可能有误,相关记录仅供参考。如能有所帮助,不胜荣幸,感谢阅读。

参考文献:

[1] 罗勇军,郭卫斌. 算法竞赛入门到进阶[M]. 北京:清华大学出版社,2019

posted on 2023-08-01 23:24  fudnixe27  阅读(6)  评论(0编辑  收藏  举报  来源