[英]How can I read a string with spaces in it in C?
scanf(“%s”,str)不会这样做。 它会在第一个空间停止阅读。 当字符串很大时,gets(str)也不起作用。 有任何想法吗?
使用带有STDIN的fgets作为文件流。 然后,您可以指定要读取的数据量以及放置位置。
char str[100];
试试这个
scanf("%[^\n]s",str);
或这个
fgets(str, sizeof str, stdin))
创建自己的函数来读取一行。 这是你基本要做的事情:
1. fgets into allocated (growable) memory 2. if it was a full line you're done 3. grow the array 4. fgets more characters into the newly allocated memory 5. goto 2.
实施可能有点棘手:-)
您需要考虑需要传递给函数的内容(至少是数组的地址及其大小); 当一切“有效”或出现错误时,函数返回什么。 您需要确定什么是错误(字符串长度为10Gbytes,没有'\\ n'错误?)。 您需要决定如何增长数组。
编辑
实际上fgetc
而不是fgets
可能更好
get a character it it EOF? DONE add to array (update length), possible growing it (update size) is it '\n'? DONE repeat
要读取带空格的字符串,您可以执行以下操作:
char name[30],ch;
i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
你什么时候想停止阅读? 在EOF,特定角色,或者什么?
您可以使用%c读取特定数量的字符
c匹配一系列宽度计数字符(默认值为1); 下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止NUL)。 通常跳过前导空格被抑制。 要首先跳过空白区域,请使用格式中的显式空格。
您可以使用%[读取特定字符(或最多排除的字符)
[匹配指定的一组接受字符中的非空字符序列; 下一个指针必须是指向char的指针,并且字符串中的所有字符必须有足够的空间,以及终止NUL字符。 通常跳过前导空格被抑制。 该字符串由特定集合中的字符组成(或不在其中); 该集合由开括号[字符和近括号]字符之间的字符定义。 如果开括号后面的第一个字符是旋音^,则该集合将排除这些字符。 要在组中包含一个小括号,请将其作为开括号或旋转后的第一个字符; 任何其他位置将结束该集。 连字符 - 也很特别; 当放置在两个其他字符之间时,它会将所有插入的字符添加到集合中。 要包含连字符,请将其设置为最后一个关闭括号之前的最后一个字符。 例如,`[^] 0-9-]'表示设置``除了紧括号,零到九和连字符'之外的所有东西。 字符串以字符的外观结束,而不是(或者,带有cir-cumflex,in)设置或字段宽度用完时
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.