50个C语言/C++程序员必会遇到的疑难解答( 三 )


18. close和fclose这个是我的误操作了, 应该使用fclosefclose是C语言的接口close也是关闭文件的作用,但是 close是系统级的接口,也就是说,比fclose更底层,更接近操作系统的函数 。
19. fscanf的多行匹配对于如下文本:
张三丰 Tel:13507318888 Addr:武当
刘备 Tel:13802289999 Addr:成都
马云 Tel:13904256666 Addr:杭州
马化腾 Tel:13107551111 Addr:深圳
可以循环使用如下代码读取:
fscanf(file, "%s Tel:%s Addr:%sn", name, tel, addr);
但是不加回车符,使用如下语句也能读取:
fscanf(file, "%s Tel:%s Addr:%s", name, tel, addr);
这是是因为:
使用fscanf(file,"%s Tel:%s Addr:%s",name_tmp,tel,addr),匹配到第一行的第2个%s时,刚好把第一个行中,除了最后的回车符以外,匹配完 。此时第一行还剩下一个回车符 。接着进入第2轮循环,又开始使用scanf匹配,但是注意,是从文件的上一次匹配结束的位置继续匹配,也就是第一行行尾的回车符为止,在这个格式字符串中,第一个是%s,所以会跳过第一行行尾的回车符,从而匹配成功 。
如果文件的内容是这样的格式,就必须在格式字符串的最后加上n了
姓名:张三丰 电话:13243879188
姓名:张四风 电话:13243879199
总结:需要特别注意fscanf的格式字符串中最后的n的作用 。
20. notepad++/vs乱码

50个C语言/C++程序员必会遇到的疑难解答

文章插图
 

50个C语言/C++程序员必会遇到的疑难解答

文章插图
 
然后重新创建一个文件,就默认是ANSI编码了,在cmd就可以正常输出中文了
vs乱码:
如果控制台的编码和程序的编码一致,还是有中文乱码,就需要修改控制台的属性,
右击控制台标题栏,选择“属性”,勾选“使用旧版控制台”
然后再重新运行 。
50个C语言/C++程序员必会遇到的疑难解答

文章插图
 
21. scanf的返回值scanf的返回值,表示成功输入的数据个数 。
例如:
int x;
scanf("%d", &x);
当输入100时,x的值是100
如果输入a, 那么将导致scanf执行失败,此时x的值还是原来的值,而x没有设置初始值,所以将是一个不确定的值,一般会是一个很大的值 。
如果要考虑合法性,可以使用:
int x;
int ret;
ret = scanf("%d", &x);
if (ret <= 0) {
printf("输入错误");
exit(1);
}
scanf的返回值,表示成功输入的数据个数 。
22. <或<=<=表示小于或者等于,
5 < 6 是真
5 < 5 是假
5 <= 6 是真
5 <=6 就相当于:
5 < 6 || 5==6
根据实际需求使用,可以随时使用< 或 <=
比如, 需要循环10次,可以使用
for (int i=0; i<10; i++)
也可以使用
for (int i=0; i<=9; i++)
23. 结构体的含义这样问,说明还没有理解结构体的含义 。结构体变量,包含多个子变量 。比如已经定义了结构体 struct student类型 。这个结构体类型中,含有name成员(一个字符数组)那么如果有如下两个结构体变量:struct studen s1;struct student s2;那么s1中含有name成员s2中也含有name成员如果只用name来表示,就无法区别是s1的name还是s2的name结构体,本质上是一种“数据类型”,和int类型、char类型同等地位!结构体,不是一个变量!使用结构体,可以定义任何多个这种结构体类型的变量 。
24. 弹出窗口#include <windows.h>#include <stdio.h>int main() { int ret;ret = MessageBox(NULL,"我爱你!","",MB_OKCANCEL|MB_SETFOREGROUND); if(ret == 1) { MessageBox(NULL,"我再想想..","", MB_OK|MB_SETFOREGROUND); }else if (ret == 2) { MessageBox(NULL,"开玩笑的","",MB_OK|MB_SETFOREGROUND); }return0;}25. 远程后不能控制系统https://jingyan.baidu.com/article/6b182309976683ba58e159c3.html
26. 4996错误关闭VS警告 warning C4996vs认为scanf, f_open等函数不安全,编译时,会出现如上4996警告 。
方法1:修改项目的项目属性
50个C语言/C++程序员必会遇到的疑难解答

文章插图
 
方法2:
在出现问题的文件中的头文件后面,添加:
#pragma warning(disable:4996)
50个C语言/C++程序员必会遇到的疑难解答

文章插图
 
27. TeamViewer的使用安装:
50个C语言/C++程序员必会遇到的疑难解答


推荐阅读