我想获取带空格的字符串元素。假设我有一个名为 test 的字符串,用户将在每个单元格中输入一些内容,例如他将输入颜色,他将在单行中输入颜色,例如;绿色黄色蓝色黑色 - 然后他将按 Enter 键,然后程序将获取所有内容,直到输入空格并将其放在字符串的第一个元素上,然后继续。在这种情况下,字符串应符合;
test[0] "Green"
test[1] "Yellow"
test[2] "Blue"
test[3] "Black"
我尝试用 2 个嵌套循环编写它,但无法获取带空格的字符串
long i
char* test[4]
printf("Enter your guess:\n");
for(i=0;i<5;i++)
{
while(test[i]!=" ")
{
scanf("%s", test[i]);
}
}
最佳答案
那是因为 scanf
(and family) "%s"
格式仅读取空格分隔的 单词。要获得整行,您应该使用 fgets
相反。
请注意,fgets
将结束换行符放入您提供的缓冲区中(如果可以容纳)
此外,您肯定需要首先为字符串分配内存。您显示的代码似乎告诉我们您没有初始化数组 test
这意味着您要么有一个空指针数组(如果 test
是全局变量),要么指针不确定(如果test
是局部变量。这两者都会导致未定义的行为。
根据平台的不同,您可能有一个名为 getline
的函数可用。它允许您读取行,并为您分配内存。与 fgets
一样,结束换行符将添加到缓冲区中。
最后,您不能使用 ==
运算符来比较字符串,它只会比较指针,而不是它们指向的内容。因此,使用 ==
进行比较几乎总是错误的,除非两个指针都指向相同的内存。
要比较字符串,您应该使用 strcmp
功能。
关于C 如何在用户按空格时获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871930/