c - fgets() 没有扫描我想要的字符串数

标签 c arrays string char fgets

我有一个句子数组,我想先用 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/

相关文章:

c - 将指向结构的指针保存到指针数组中

php - 向/从二维数组添加/获取数据不起作用

java - 在java中将单词分成两个分区

Java字符串到不同格式的日期转换

capset 因指向结构的指针而失败

c - 64 位值的反转字节

javascript - 矩阵中单词的出现顺序为从左到右、向下或对 Angular 线向左(向上或向下)

java - 使用 collections.sort 按字母顺序对构造对象列表进行排序

android - 根据字符串数组大小创建复选框

c# - 在 C# 中将字节数组转换为字符串