4,VS常见问题解决(一闪而过、等问题)

当然入门学c可以用VS,但是深入就不应该用VS(MSVC)编译器了,毕竟VS2017还没有完全支持C99(这个从VS2017没有实现变长数组可见)

但是想看c源码,还是

1. 推荐用 *nix系统

2. 再不济用 VS + WSL2

3. 没办法用Windows平台下的Mingw64

写c语言并避免程序一闪而退:

http://c.biancheng.net/view/457.html

 Ps. 受人诟病的void main()可能是谭老教授的苦心,毕竟这样的程序不会一闪而过,当然还是推荐大家使用头文件stdlib.h 和函数_命令system("pause");

system();的输入参数和cmd里的命令应该是一样的

 

编译时报错:

1,直接双击说明就跳转到报错附件行

2,点击报错代码(直接打开微软文档官网,报错的详细和解决方案都在这里(中文))

 

如果是图中VCTP001错误[无法分析从行* 到 的区域中的代码],有可能是和我一样把子函数写在了主函数main()里..........

 

scanf_s()函数,运行时录入数据,内存错误

scanf_s()和scanf()的用法其实差别挺大的。

一个例子:

scanf_s( "%d %f %c %C %s %S", 
&i, &fp, &c, 1, &wc, 1, s, (unsigned)_countof(s), ws, (unsigned)_countof(ws) );

 

关于scanf_s()的用法

https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=vs-2017

 

 scanf(" %d", &num)录入字符导致死循环刷屏?

只需要利用scanf返回值即可, scanf的返回值是成功录入的个数. 所以只需要

while (scanf(" %d", &num) != 1) 

  getchar();

 

即可解决问题

 

在 Visual Studio 中开发代码而无需创建项目或解决方案

解决从Git里拉取的代码没有sln解决方案的问题

对 Visual Studio 中 C++ 生成系统的“打开文件夹”支持 | Microsoft Docs

 

 

 

从流中跳过读取一行

char * p = NULL;

fscanf(fp, "%*[^\n]", p);

 

*号是跳过赋值,[ ]是scanf的正则匹配,^\n在这里是指没遇到'\n'就继续录入

 

读取CSV文件(读取以逗号为分割的字符串) 

如文件t.csv内容为

3, Cart, john, R35\n

4, 省略...

1 // 读取csv的一行
2 
3 FILE * fp = fopen("t.csv", "r");
4 
5 fscanf(fp, "%u, %[^,], %[^,], %[^\n], "
6 , &id, &Category, &Name, &Model);

 注意是%[^,]    而不是 %[^,]s

 

想要写try-catch-finally语句?

VS(MSVC)提供了对c的拓展

https://docs.microsoft.com/zh-cn/cpp/c-language/try-finally-statement-c?view=vs-2019

 

如果想要通用的,而非MSVC编译器,可以自己写异常处理,以下为参考资料

https://www.zhihu.com/question/20597909

https://blog.csdn.net/yangping_zheng/article/details/20781071

https://blog.csdn.net/smstong/article/details/50728022

 


彻底理解setjmp/longjmp并DIY一个简单的协程

posted @ 2018-10-24 19:38  蓝天上的云℡  阅读(798)  评论(0编辑  收藏  举报