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

标签 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]);
    }



}

最佳答案

那是因为 scanf (and family) "%s" 格式仅读取空格分隔的 单词。要获得整行,您应该使用 fgets相反。

请注意,fgets 将结束换行符放入您提供的缓冲区中(如果可以容纳)

<小时/>

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

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

<小时/>

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

要比较字符串,您应该使用 strcmp功能。

关于C 如何在用户按空格时获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871930/

相关文章:

c - (读取 CSV 文件)scanf 在模式不匹配后跳到下一行输入

c - 处理器是否具有首先针对或主要针对 C/C++ 语言的优化和架构偏好?

c - 如何在 C 中仅使用 printf、scanf、while、if 和 for 获取字符串中 float 的值

java - 如何确定一个字符串是否是另一个字符串的子序列而不考虑其间的字符?

java - 来自给定列表的用户输入,混合了 String 和 Int

c - 处理器和协处理器之间的加密区别

c - 如果您以字符串格式输入无效选择,程序不会要求输入新条目

c++ - 如何将字符串放入整数数组c++

javascript - 检查是否至少有一个输入字段在 jQuery 中被填充

javascript - 无法绑定(bind)到 'ngModel',因为它不是 'input' 的已知属性