我使用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]);
}
使用%[^\n]
我希望将一个句子转换为单个字符串。
有什么问题?
更新: 我想这样输入:
4
one
two
THREE three
FOUR four
但实际上,当我输入“4”时,程序会输出4个空白行然后退出。
[walle@centos64 ~]$ ./a.out
4
_
_
_
_
我期望的输出是这样的:
[walle@centos64 ~]$ ./a.out
4
one
two
THREE three
FOUR four
thans。
答案 0 :(得分:1)
使用fgets
以外的scanf
获取输入行。在输入整数getchar
之后,额外的n
会消耗新行。
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]);
请注意,fgets
也会将新行存储在字符串中。如果您不需要,请将其删除。
答案 1 :(得分:1)
您只需在scanf
中的说明符之前添加空格。它将消耗stdin中剩余的\n
并使你能够提供第二个输入,依此类推。
更改为scanf(" %[^\n]", str[i]);
和printf(" %s\n", str[i]);
注意scanf
中的空格。
答案 2 :(得分:0)
#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
你在“[^ \ n]”之前错过了“%s [^ \ n]”中的's'。