scanf(“%s”,str)不会这样做。 它会在第一个空间停止阅读。 当字符串很大时,gets(str)也不起作用。 有任何想法吗?
使用带有STDIN的fgets作为文件流。 然后,您可以指定要读取的数据量以及放置位置。
char str[100];
试试这个
scanf("%[^n]s",str);
或这个
fgets(str, sizeof str, stdin))
创建自己的函数来读取一行。 这是你基本上要做的事情:
fgets分配(可增长)内存 如果它是一个完整的线你就完成了 3.种植arrays 4.在新分配的内存中添加更多字符 5.转到2。
实施可能有点棘手:-)
您需要考虑需要传递给函数的内容(至少是数组的地址及其大小); 当一切“正常”或出现错误时,函数返回什么。 您需要确定什么是错误(字符串长度为10Gbytes,没有’ n’错误?)。 您需要决定如何增长arrays。
编辑
实际上fgetc
而不是fgets
可能更好
得到一个角色 它EOF? DONE 添加到数组(更新长度),可能增长(更新大小) 是吗? n? DONE 重复
你什么时候想停止阅读? 在EOF,在一个特定的角色,或什么?
您可以使用%c读取特定数量的字符
c匹配一系列宽度计数字符(默认值为1); 下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止NUL)。 通常跳过前导空格被抑制。 要首先跳过空白区域,请使用格式中的显式空格。
你可以用%[读取特定字符(或最多被排除的字符)
[匹配指定的一组接受字符中的非空字符序列; 下一个指针必须是指向char的指针,并且字符串中的所有字符必须有足够的空间,以及终止NUL字符。 通常跳过前导空格被抑制。 该字符串由特定集合中的字符组成(或不在其中); 该集合由开括号[字符和近括号]字符之间的字符定义。 如果开括号之后的第一个字符是旋音^,则该集合将排除这些字符。 要在组中包含一个近括号,请将其作为开括号或旋转后的第一个字符; 任何其他位置将结束该集。 连字符 – 也很特别; 当放置在两个其他字符之间时,它会将所有插入字符添加到集合中。 要包含连字符,请将其设置为最后一个关闭括号之前的最后一个字符。 例如,`[^] 0-9-]’表示设置“除了紧括号,零到九和连字符’之外的所有东西。 字符串以字符的外观结束,而不是(或者,带有cir-cumflex,in)设置或字段宽度用完时
要读取带空格的字符串,您可以执行以下操作:
需要了解更多c/c++开发分享如何在C中读取包含空格的字符串?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
char name[30],ch; i=1; while((ch=getchar())!='n') { name[i]=ch; i++; } i++; name[i]='n'; printf("String is %s",name);
以上就是c/c++开发分享如何在C中读取包含空格的字符串?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979583.html