如何以空格在输入用C(How to Take whitespace in Input in C)

2019-08-17 21:14发布

我想采取字符数组控制台,它也包括空格,我知道在C中的唯一方法是scanf函数,但它错过停止服用输入,一旦击中空白。 我该做什么?

下面是我在做什么。

char address[100];

scanf("%s", address);

Answer 1:

尝试使用与fgets()。 它将从您所选择的流中读取一个完整的线(标准输入,我猜你正在寻找)。 您的情况的一个例子:

char address[100];

fgets(address, 100, stdin);

与fgets()的读出在第二个参数(减一)通过字符最多数量。 没有缓冲区溢出,你会得到整个线直至并包括一个换行符(或最多EOF)。 需要注意的是,因为要读取的字符的最大数量是参数之一,它是可能的,你会得到一个部分行。 请检查是否在返回字符串中的最后一个字符是“\ n”,你就会知道你有一个完整的线。 EOF检测是非常简单过; 一个NULL的返回值和检查errno应该帮助你。

由于克里斯(下面)下进行约局部线的点。



Answer 2:

你可以尝试这样的事情:

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


Answer 3:

有办法做到这一点的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.
  }


Answer 4:

fgets()

fgets()读取比从流,并将它们存储大小的字符以下的至多一个到缓冲由s指向。 一个EOF或换行后读停止。 如果一个换行符被读取,它被保存到缓冲区。 A“\ 0”在缓冲器中的最后一个字符之后存储。

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

在许多问题SO可用的进一步细节,例如输入串贯通scanf的 。

(由于大众需求,refrence以gets()被移除)



Answer 5:

我个人用fgets,但已经被指出了这里。 使用scanf函数会doiung它的一种方式

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

直到“\ n”发现这需要在所有的字符。



Answer 6:

如果你想使用内部结构动态数组采取输入到新的生产线,这可能是有用的:

#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);
}


Answer 7:

我的风格。

 #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);


文章来源: How to Take whitespace in Input in C