如何在C中输入空格

时间:2009-10-12 17:00:20

标签: c whitespace scanf

我想从控制台获取字符数组,它还包括空格,我在C中知道的唯一方法是scanf,但是一旦用空格命中它就会错过停止输入。我应该怎么做?

这就是我在做什么。

char address[100];

scanf("%s", address);

7 个答案:

答案 0 :(得分:14)

尝试使用fgets()。它将从您选择的流中读取一个完整的行(stdin,我想您正在寻找)。您案例的一个例子:

char address[100];

fgets(address, 100, stdin);

fgets()最多会读取第二个参数中传递的字符数(减1)。没有缓冲区溢出,你将得到整行,包括换行符(或最多EOF)。请注意,由于要读取的最大字符数是参数之一,因此您可能会获得部分行。检查返回的字符串中的最后一个字符是否为'\ n',并且您将知道您有一个完整的行。 EOF检测也非常简单; NULL返回值以及对errno的检查可以帮助您。

感谢Chris(下面),关于部分线的观点。

答案 1 :(得分:7)

您可以尝试这样的事情:

char str[100];
scanf("%99[0-9a-zA-Z ]s", str);
printf("%s\n", str);

答案 2 :(得分:1)

ways to do it with scanf(),但我认为他们很快就会变得难看。常见模式(令人惊讶地尚未提及)是使用fgets()读取字符串,然后使用sscanf()来处理它。 sscanf()的工作方式与scanf()类似,只是处理标准输入流,而不是处理传递给它的字符串(与printf()sprintf()相关的方式相同)。基础知识:

char s[100], str[100];
int i, x;
fgets(s, 100, stdin);
if(sscanf(s, "%d %x %s", &i, &x, str) != 3)
  {
    // our three variables weren't all set - probably an invalid string
    // either handle the error or set default values here.
  }

答案 3 :(得分:0)

请参阅fgets()

  

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。如果读取换行符,则将其存储到缓冲区中。 “\ 0”存储在缓冲区中的最后一个字符之后。

char *fgets(char *s, int size, FILE *stream);

许多SO问题中提供了更多详细信息,例如input-string-through-scanf

(由于受欢迎的需求,对gets()的引用被删除了)

答案 4 :(得分:0)

我个人会使用fgets,但这里已经指出了。使用scanf的一种方式是

scanf("%[^\n]", address);

这将占用所有字符,直到找到'\ n'。

答案 5 :(得分:0)

如果你想在结构中使用动态数组获取输入,那么这可能很有用:

#include<stdio.h>
#include<stdlib.h>

struct student{
char *name;
};

int main()
{
        struct student s;

        s.name = malloc(sizeof(char *));

        printf("Name: ");
        // fgets(s.name, 10, stdin); // this would limit your input to 10 characters.

        scanf("%[^\n]", s.name);   

        printf("You Entered: \n\n");

        printf("%s\n", s.name);
}

答案 6 :(得分:0)

我的风格。

 #include <stdio.h>

    #define charIsimUzunlugu 30

        struct personelTanim
        {       
            char adSoyad[charIsimUzunlugu];             
        } personel;

    printf(" your char       : ");
    scanf("%[^\n]",personel.adSoyad);

    printf("\n\n%s",personel.adSoyad);