C当用户按空格时如何获取字符串

时间:2016-08-10 11:15:18

标签: c string input scanf

我想获得带空格的字符串元素。假设我有一个名为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]);
    }



}

1 个答案:

答案 0 :(得分:1)

因为scanf (and family) "%s"格式只读取空格分隔字。要获得整行,您应该使用fgets代替。

请注意fgets将结束换行符放在您提供的缓冲区中(如果适合)

此外,您肯定需要先为字符串分配内存。你展示的代码似乎告诉我们你没有初始化数组test,这意味着你要么有一个空指针数组(如果test是一个全局变量)或指针是< em> indeterminate (如果test是一个局部变量。这两个都会导致未定义的行为

根据平台的不同,您可能有一个名为getline的函数,它允许您读取行,并为您分配内存。与fgets一样,结尾换行符将添加到缓冲区中。

最后,您无法使用==运算符比较字符串,它只会比较指针而不是它们指向的内容。因此,使用==进行比较几乎总是假的,除非两个指针都指向同一个内存。

要比较字符串,您应该使用strcmp函数。