使用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