当然入门学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()的用法
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, "%*[^ ]", p);
*号是跳过赋值,[ ]是scanf的正则匹配,^ 在这里是指没遇到' '就继续录入
读取CSV文件(读取以逗号为分割的字符串)
如文件t.csv内容为
3, Cart, john, R35
4, 省略...
1 // 读取csv的一行 2 3 FILE * fp = fopen("t.csv", "r"); 4 5 fscanf(fp, "%u, %[^,], %[^,], %[^ ], " 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