接受单词并在新行上打印每个字母的程序(c)

时间:2018-04-22 08:46:19

标签: c arrays newline fgets

我必须在c中创建一个程序,它接受一个没有空格的单词,并在新行上打印出每个字母。但是,我必须使用fgets。我写了这个程序:

#include <stdio.h>
#define MAX_LINE 4096

int main(void) {
    int i;
    char array[MAX_LINE];

    printf("Enter a string: ");
    fgets(array,MAX_LINE,stdin);
        for(i=0; array[i]!='\0'; i++){  
            printf("%c\n",array[i]);

       }
       return 0;
}

但它会在单词的末尾打印出额外的2行。我不明白为什么。

2 个答案:

答案 0 :(得分:1)

fgets将换行字符读入缓冲区,如果缓冲区中有足够的空间。您可以修改条件以适应:

for(i=0; array[i] != '\n' && array[i] != '\0'; i++) {

man fgets

  

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。如果读取换行符,则将其存储到缓冲区中。终止空字节('\ 0')存储在缓冲区中的最后一个字符之后。

答案 1 :(得分:0)

fgets读取换行符并将其存储在缓冲区中。

另见: Removing trailing newline character from fgets() input