我想获得带空格的字符串元素。假设我有一个名为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]);
}
}
答案 0 :(得分:1)
因为scanf
(and family) "%s"
格式只读取空格分隔字。要获得整行,您应该使用fgets
代替。
请注意fgets
将结束换行符放在您提供的缓冲区中(如果适合)
此外,您肯定需要先为字符串分配内存。你展示的代码似乎告诉我们你没有初始化数组test
,这意味着你要么有一个空指针数组(如果test
是一个全局变量)或指针是< em> indeterminate (如果test
是一个局部变量。这两个都会导致未定义的行为。
根据平台的不同,您可能有一个名为getline
的函数,它允许您读取行,并为您分配内存。与fgets
一样,结尾换行符将添加到缓冲区中。
最后,您无法使用==
运算符比较字符串,它只会比较指针而不是它们指向的内容。因此,使用==
进行比较几乎总是假的,除非两个指针都指向同一个内存。
要比较字符串,您应该使用strcmp
函数。