c/c++

c/c++文件流字符串读取操作

放肆的年华 提交于 2019-12-07 09:25:34
c文件打开与关闭: 打开: FILE *fp = fopen(path, flag); 关闭: fclose(fp); c文件流 char c char s[] 格式化输入输出char s[] FILE stdio FILE* fp stdio FILE *fp stdio FILE*fp read c=getchar(); c=getc(fp); gets(s); fgets(s,fp); scanf("%s",s); fscanf(fp,"%s",s); write putchar(c); putc(c,fp); puts(s); fputs(s,fp); printf("%s",s); fprintf(fp,"%s",s); c++文件打开与关闭: 打开有两种方式: 1. fstream file(path, flag);2. fstream file; file.open(path, flag); 当文件不存在时,若flag中有ios_base::in,则不创建文件。 关闭: file.close() c++文件流 char c char s[] char s[] 读取整行 string s string s 读取整行 stream iostream ifstream in;ofstream out iostream ifstream in;ofstream out

Vim 中使用 OmniComplete 为 C/C++ 自动补全(部分增加)

最后都变了- 提交于 2019-12-07 08:41:15
对原文做了部分修改及增加, 原文地址 http://timothyqiu.com/archives/using-omnicomplete-for-c-cplusplus-in-vim/ OmniComplete 并不是插件的名字,而是 Vim 众多补全方式中的一种(全能补全)。说白了 OmniComplete 其实就是根据光标前的内容猜测光标后的内容,具体怎么猜取决于所采用的脚本。 而 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本。 那么经常和 OmniCppComplete 一起出没的 Ctags 又是什么呢?Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点关系都没有)。它可以为各种语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 来说,就是把源代码中的各种宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。 OmniCppComplete 脚本就是根据 Ctags 生成的索引文件进行补全的。 好了,背景知识就是这样,安装步骤如下: 安装 Ctags 一般ctags 都是默认安装过的,fedora下可以用yum list ctags,查看是否安装 从官网下载 Ctags 可执行文件,网站是 http://ctags

vim c/c++智能补全插件

China☆狼群 提交于 2019-12-06 16:12:53
我很喜欢vim,而且一直用,不过对于c/c++只能补全一直都没有一个很好的解决方案,虽然有个插件(omnicomplete)功能比较强大,跟eclipse等IDE比起来还是很有差距的,特别是对于类的智能补全。 前些天网上找到一个功能甚是强大的插件( clang complete ),可以很好的解决这个问题,个人认为完全可以取代omnicomplete。这个插件依赖于clang编译器,这个编译器安装很简单,一般流行的linux发行版本的软件仓库中都有,比如在debian或ubuntu中可以这样, sudo apt-get install clang 然后就是就是安装插件了, clang complete , 如何安装,自己看介绍吧。使用方法就是当你在类名或实例后输入.或者->时,vim会自动根据clang编译器提供的信息不全该类提供的方法,当然如果你的代码中有错,可就不行哦。因为你的代码补全信息都是要通过clang实时编译器编译的。 贴一张效果图,个人强力推荐! 有兴趣的朋友可以打开原文链接看看。 原文链接: http://blog.chmd.fr/vim-complete-c-accurately-pulling-informations-from-the-compiler-with-gccsense-and-clang_complete.html 来源: oschina 链接:

C Primer Plus 第8章 字符输入/输出和输入确认 8.2 缓冲区

假如想象 提交于 2019-12-05 20:56:22
8.2 缓冲区 当您在一些系统上运行前面的程序时,您所输入的文本立即回显。也就是说,一个可能的运行示例如下所示: HHeelllloo,,tthheerree..II wwoouulldd[enter] lliikkee aa# 前面描述的行为是例外的。在大多数系统上,在您按下回车键之前什么都不会发生,正如在第一个例子中所示。 输入字符的立即回显是非缓冲(unbuffered)或直接(direct)输入的一个实例,它表示您所键入的字符对正在等待的程序立即变为可用。 相反,延迟回显是缓冲(buffered)输入的实例,这种情况下 您所键入的字符被收集并存储在一个被称为缓冲区(buffer)的临时存储区域中 。 按下回车键可使您所键入的字符 对程序变为可用 。 为什么需要缓冲区? 首先,将若干个字符作为一个块传输比逐个发送这些字符耗费时间少 。 其次,如果您输入有误,就可以使用您的键盘更正功能来修正错误 。当最终按下回车键时,您就可以发送正确的输入。 缓冲分为两种: 完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O。 对完全缓冲来说,缓冲区满时被清空(内容被发送至其目的地)。这种类型的缓冲通常出现 在文件输入中。缓冲区的大小取决于系统,但512字节和4096字节是常见的值。对行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区。

C Primer Plus 第8章 字符输入/输出和输入确认 8.3 终止键盘输入

帅比萌擦擦* 提交于 2019-12-05 20:56:08
8.3.1 文件、流和键盘输入 文件是一块存储信息的存储器区域。 通常,文件被保存在某种类别的永久存储器上,例如软盘、硬盘或磁盘。 具有强大、灵活等特点的C语言具有许多打开、读取、写入和关闭文件的库函数。在一个级别上,它可以使用宿主操作系统的基本文件工具来处理文件。这被称为低级I/O。由于计算机系统之间存在许多差异,所以不可能创建一个通用的低级I/O函数标准库。然而, C还以第二种级别处理文件,称为标准I/O包。这包括创建用于处理文件的I/O函数的标准模型和标准集。 使用标准I/O包时,就屏蔽掉了这些差异。因此,要检查一个换行符,您可以使用if(ch=='\n')。如果该系统实际上使用回车/换行字符的组合,则I/O函数自动在两种表示法之间来回转换。 从概念上讲,C程序处理一个流而不是直接处理文件。流(stream)是一个理想化的数据流,实际输入或输出映射到这个数据流。这意味着具有不同属性的多种类型的输入由流表示,会具有更多统一的属性。于是打开文件的过程就成为将流与文件相关联,并通过流进行读写的过程。 第13单详细的讨论了文件。对本章来说,仅需注意 C对待输入和输出设备与其对待存储设备上的普通文件相同 。特别的是, 键盘和显示设备作为每个C程序自动打开的文件来对待 。 键盘输入由一个被称为stdin的流表示,而到屏幕上的输出由一个被称为stdout的流表示。 getchar()

C到C++ 快速过度 A C++基本框架

扶醉桌前 提交于 2019-12-05 20:17:09
单从语法上讲,C++继承了C中几乎所有的关键字,因此在C++中使用C语言完全没有问题。 需要注意的是,printf() 和 scanf() 是库函数,他们并不是C语言的一部分。比如,你不包含头文件stdio.h的时候便无法使用他们,但int,while,for等关键字仍然可以使用。 在C++中使用C语言的库函数时,在包含头文件的部分,需要作一些变更: 我们使用 #include <cstdio>,而不是 #include <stdio.h>。这对于C中的其他头文件也一样,比如 <ctype.h> , <string.h> 在C++中都要用 <cctype> 和 <cstring> 代替。 学习语言时我们最先接触的总是程序框架,之后学习的内容只需在此之上进行添加和修改: #include <iostream> using namespace std; int main() { return 0; } 这是C++的基本框架,它和C的: #include <stdio.h> int main() { return 0; } 稍有不同。 我们各自包含了他们的一个基本库函数的头文件,它们各自含有C++和C中的输入输出函数。 对C而言,我们用下面的程序进行输入输出: #include <stdio.h> int main() { int n; if(scanf("%d", &n))

C Primer Plus 第8章 字符输入/输出和输入确认 8.1 单字符I/O

谁说我不能喝 提交于 2019-12-04 23:42:49
8.1 单字符I/O:getchar()和putchar() getchar()和putchar()每次输入和输出一个字符。 程序8.1 echo.c程序 /*echo.c--重复输入*/ #include <stdio.h> int main(void) { char ch ; while((ch=getchar())!='#') putchar(ch); return 0; } ANSI C 将stdio.h头文件与使用getchar()和putchar()相关联,这就是我们在程序中将该文件包含在内的原因。 看过此程序后,您可能想知道在回显输入之前为什么必须键入完整的一行。您可能还想知道是否在在更好的方法来终止输入。让我们来学习C程序对键盘输入的处理方式。特别地,我们来研究缓冲和标准输入文件的概念。 来源: oschina 链接: https://my.oschina.net/u/2754880/blog/700910

在mac上用AndroidStudio1.5 创建NDK开发环境(Ubuntu 16.4LTS亲测可用)

此生再无相见时 提交于 2019-12-04 19:30:32
本文参考了youtube上的一个视频,想直接看视频的可以访问 https://www.youtube.com/watch?v=RmPuwdxR1qs (要翻墙) 废话少说打开androidStudio,新建一个工程 NDKTest 新建完毕 依次打开 File->ProjectStruct 得到下面图 检查第三行是否为空,是则代表ndk还没下载,直接点击下载即可 下载完毕后,打开设置,在搜索那里输入Exter,选择ExternalTools 注意!默认情况下这里是空的 点击左下角那个+号,添加这几个工具路径 分别是javah,ndk-build,ndk-build clean,依次如下图 Program $JDKPath$/bin/javah (javah存放路径) Parameters -classpath $Classpath$-v -jni $FileClass$ (命令参数) Working directory $SourcepathEntry$/../jni (这个是你的c/c++文件存放路径) 第一个是ndk的文件路径,默认下载地址是在你的sdk包下面 Working directory $ProjectFileDir$/app/src/main 这个跟ndk-build相比只是第二行多了个clean 到这里环境就配置完毕了 然后将目录切换到project 右键main

C语言实现均匀分布随机函数

蓝咒 提交于 2019-12-03 14:46:42
前言 随机函数就是产生数的函数,C语言里使用rand(),srand()等随机函数实现随机数生成。 函数简介 int rand( void ); 返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。 C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 srand()会设置供rand()使用的随机数种子。如果在第一次使用rand()之前没有调用srand(),那么系统会自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。 void srand( unsigned int seed ); 改变随机数表的指针位置(用seed变量控制)。 使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。 一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 场景

使用Visual Studio,几步实现Python C++扩展,以及DLL调用

一个人想着一个人 提交于 2019-11-30 22:38:20
在网上搜了下Python扩展教程,很多提到第三方开源库,而官方推荐的是用setup.py。其实用Visual Studio很简单!来看一下如何一步步编写一个Python扩展,以及如何通过扩展来调用DLL。 参考原文: Wrapping C/C++ Methods of Dynamsoft Barcode SDK for Python Visual Studio环境配置 在Visual Studio中创建一个Win32工程 DynamsoftBarcodeReader 。打开工程属性,添加头文件和库文件路径: 添加依赖库 python27.lib : 把扩展改成 .pyd : 这样就可以去build工程了。不过如果是使用Debug去build,会出现错误: 原因是因为官方发布的python安装包不包涵debug的库,如果需要可以自己下载源码编译。所以把配置切换到release,成功生成 DynamsoftBarcodeReader.pyd : DLL调用举例:封装Dynamsoft Barcode SDK C++接口 在Python脚本中导入 DynamsoftBarcodeReader ,Python会搜索 DynamsoftBarcodeReader.pyd ,并且调用 initDynamsoftBarcodeReader() 做初始化。 在工程配置中先加入Dynamsoft