Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scanf()获取一个int和一些字符串?_C_String_Scanf - Fatal编程技术网

使用scanf()获取一个int和一些字符串?

使用scanf()获取一个int和一些字符串?,c,string,scanf,C,String,Scanf,我使用scanf读取整数n,然后读取n个字符串。但它似乎不起作用。节目如下: #include <stdio.h> #include <string.h> #define MAX 1000 #define MAX_LEN 81 char str[MAX][MAX_LEN]; int a,i; int main() { scanf("%d", &a); for (i=0; i<a; ++i) {

我使用
scanf
读取整数n,然后读取n个字符串。但它似乎不起作用。节目如下:

#include <stdio.h>
#include <string.h>

#define MAX 1000
#define MAX_LEN 81

char str[MAX][MAX_LEN];
int a,i;


int main()
{
        scanf("%d", &a);
        for (i=0; i<a; ++i) {
                scanf("%[^\n]", str[i]);
        }

        for (i=0; i<a; ++i)
                printf("%s\n", str[i]);

}
但事实上,当我输入“4”时,程序会输出4个空行,然后退出

[walle@centos64 ~]$ ./a.out
4
_
_
_
_
我期望的输出如下所示:

 4
 one 
 two
 THREE three
 FOUR four
[walle@centos64 ~]$ ./a.out
4
one
two
THREE three
FOUR four

thans.

使用
fgets
而不是
scanf
来获取输入行。在输入整数
n
后,会有一个额外的
getchar
来使用新行

scanf("%d", &a);
getchar();
for (i=0; i<a; ++i) {
        fgets(str[i], sizeof(str[i]), stdin);
}

for (i=0; i<a; ++i)
        printf("%s", str[i]);
scanf(“%d”和&a);
getchar();
对于(i=0;i
#包括
#包括
#定义最大1000
#定义最大长度81
字符str[MAX][MAX_LEN];
int a,i;
int main()
{
scanf(“%d”和“&a”);

对于(i=0;i您只需在
scanf
中的说明符之前添加一个空格。它将消耗stdin中剩余的
\n
,并使您能够进行第二次输入,依此类推

更改为
scanf(“%[^\n]”,str[i]);
printf(“%s\n”,str[i]);


请注意,
scanf

中给出的
输入
当前输出
预期输出
示例中的空格将有助于澄清您的陈述您需要在每次
scanf()之后吞下
\n
,例如使用
getchar()
@Paul R,谢谢你的回复。你能解释很多吗?为什么我使用“%s”时不需要“吞咽”格式?这对输入不起作用,我已经在我的问题中更新了。谢谢。@FeiXue是的,我在看到您的编辑之前发布了答案。请使用
fgets
查看此版本@FeiXue您知道吗?即使在程序的第一部分,您使用
scanf
来获取整数
n
。这样做更好它与
fgets
sscanf
一起使用,因为它会更健壮。谢谢。我知道
scanf
可能会有一些问题。但在我的情况下,它是安全的,适合的。再次感谢。如果您的输入包含空格,这将不起作用,如问题中的示例所示。
scanf(%s[^\n]”,str[I])
肯定是错误的。建议
scanf(“%[^\n]”,str[i])
#include <stdio.h>
#include <string.h>

#define MAX 1000
#define MAX_LEN 81

char str[MAX][MAX_LEN];
int a,i;


int main()
{
        scanf("%d", &a);
        for (i=0; i<a; ++i) {
                scanf("%s[^\n]", str[i]);
                /* scanf("%s", str[i]);*/        /*this line is also OK */
        }

        for (i=0; i<a; ++i)
                printf("%s\n", str[i]);

}


$ gcc -g t.c
$ ./a.out 
2
one
two
one
two