Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中读取包含空格的字符串?_C_String_Spaces - Fatal编程技术网

如何在C语言中读取包含空格的字符串?

如何在C语言中读取包含空格的字符串?,c,string,spaces,C,String,Spaces,scanf(“%s”,str)不会这样做。它将在第一个空格处停止阅读。 当字符串较大时,get(str)也不起作用。有什么想法吗?使用STDIN作为文件流。然后,您可以指定要读取的数据量和放置位置。何时停止读取?在EOF,在一个特定的角色,还是什么 您可以使用%c读取特定数量的字符 c匹配一个宽度序列 计数字符(默认为1);下一个 指针必须是指向char的指针,并且必须有足够的空间 对于所有字符(未添加终止NUL)。照常 前导空白的跳过被抑制。跳过空白 首先,在格式中使用显式空格 您可以使用%[

scanf(“%s”,str)不会这样做。它将在第一个空格处停止阅读。
当字符串较大时,get(str)也不起作用。有什么想法吗?

使用STDIN作为文件流。然后,您可以指定要读取的数据量和放置位置。

何时停止读取?在EOF,在一个特定的角色,还是什么

您可以使用%c读取特定数量的字符

c匹配一个宽度序列 计数字符(默认为1);下一个 指针必须是指向char的指针,并且必须有足够的空间 对于所有字符(未添加终止NUL)。照常 前导空白的跳过被抑制。跳过空白 首先,在格式中使用显式空格

您可以使用%[

[匹配一个非空的 来自指定集合的字符 接受的字符;下一个指针必须是指向 烧焦 而且必须有足够的空间容纳游戏中的所有角色 一串 加上一个终止的NUL字符。通常跳过前导 白色 空格被抑制。字符串由字符组成 在里面 (或不在)特定集合中;集合由 人物 在左括号[字符和右括号]之间 查拉克- 如果第一个字符 性格 在开放括号后面是一个扬抑符^。包括一个闭合符 集合中的括号,使其成为打开后的第一个字符 支架或旋转支架;任何其他位置都将结束集合。 连字符-也很特殊;当置于两个字符之间时 其他字符,则将所有中间字符添加到集合中。 要包含连字符,请将其设置为最后一个字符之前的最后一个字符 右括号。例如,`[^]0-9-]'表示集合 ``一切 除右括号、0到9和连字符''外,其余为 一串 以不在中的字符的外观结束(或,以 cir- cumflex,in)设置或当字段宽度用完时


创建您自己的函数来读取一行。以下是您基本上要做的:

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.
要读取带空格的字符串,可以执行以下操作:

char name[30],ch;

i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
试试这个

 scanf("%[^\n]s",str);
还是这个

fgets(str, sizeof str, stdin))

gets
永远不起作用。使用
gets
是一个固有的缺陷。使用
fgets
。也许是我的c版本根本不接受gets…谢谢!@Johnny:R警告不要使用
gets()
是因为使用它会在代码中引入一个巨大的安全漏洞,而不是您的特定编译器有问题(它不应该;
get()
从一开始就是C的一部分)。它从C99开始就被弃用了,不应该再被使用。fgets(str1,100,stdin);fgets(str2,100,stdin);我不会被要求输入第一个字符串。它会直接输入第二个字符串。感谢您的快速回答。我不确定您的评论是什么意思-有什么不起作用吗?我不会被提示插入第一个字符串。我们没有足够的信息来帮助您解决这些其他问题。
fgets
是一个阻塞读取,因此您会执行类似于
printf(“在此处输入行\n”);
的操作,然后调用
fgets(…)
-直到用户输入带有换行符的内容时,fgets才应返回。这就是我所做的,但当我运行程序时,在输入任何内容之前会出现错误窗口……无论如何,谢谢;)我只是不希望字符串之间出现空格。我尝试了scanf(“%1”)[^\n]”,str),但也不起作用。无论如何,谢谢!我想这意味着最多79个字符,对吗?我需要一个更大的字符串。对我来说,一行意味着所有字符直到一个新行。你能更详细地描述一下你在这里真正想做什么吗?好的。我想做:char*str1;printf(“给出一个字符串”\n”);scanf(“%s”,str1);char str2[strlen(str1)];用于(int i=0;i@Johny请尝试scanf(“%[^\n]s”,str);您在scanf()中遗漏了“s”。1)在“%[^\n]s”中没有理由使用
s
。2)
scanf(“%[^\n]”…
将不扫描任何内容,如果输入是
“\n”
.3)
scanf…
不能防止大量输入。4)
scanf(“%[^\n]”…
'\n'
留在
stdin
中。而且
s
在这里没有意义。
%[^\n]
已经要求除新行以外的所有字符。
ch
应该是
int
以区分
EOF
和所有其他
char
。现在,
while((ch=getchar())!='\n')
是一个无限循环,应该从
getchar()返回
EOF
 scanf("%[^\n]s",str);
fgets(str, sizeof str, stdin))