我有一个句子数组,我想先用 fgets()
扫描它们,然后一个一个地打印出来。这是程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]) {
char sentence[100][100]; /* 100 sentences with at most 100 characters*/
int n,i,j;
scanf("%d",&n); /* number of sentences*/
for (i=0;i<n;i++) {
fgets(sentence[i],100,stdin);
}
printf("****************************");
for (i=0;i<n;i++) {
for(j=0;j<strlen(sentence[i]);j++) {
putchar(sentence[i][j]);
}
}
return 0;
}
问题是这只扫描了 n-1 个句子。这是为什么?
另一件奇怪的事情是,在打印星号之后,它会在我没有告诉它这样做的情况下开始在新的一行打印。
最佳答案
假设输入是
3 abc def ghi
n扫描后,光标停留在第一行的数字3
之后。
您可以在%d
后添加一个空格,如scanf("%d ", &n);
将光标移动到下一行。 (这假定第一句不以空格开头)。
取决于您的环境是(Windows/Unix),以及您是否希望每个字符串都保留行尾字符,您需要将缓冲区大小增加到:
- 101 - 用于 Unix 行尾,您可以丢弃 100 个字符长的句子的行尾字符
- 102 - 适用于 Windows 行尾,您可以丢弃 100 个字符长的句子的行尾字符
- 102 - 用于 Unix 行结束并且您希望保留所有句子的行结束符
- 103 - 适用于 Windows 行尾并且您希望保留所有句子的行尾字符
例如,如果您错误地将 101 用于 Windows,则用于以下输入
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
输出将是:
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
(有一些空行)
关于c - fgets() 没有扫描我想要的字符串数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070460/