为什么printf输出中有一个新行? #包括 #包括 #包括 内部主(空){ 字符名词[25]; 字符复数[28]; fgets(名词,24,标准术语); strcpy(复数,名词); int len=strlen(复数); if(复数[len-2]='h'| |复数[len-2]=='s'){ 复数[len-1]=“e”; 复数[len]='s'; 复数[len+1]='\0'; }else if(复数[len-2]='y'){ 复数[len-2]=“i”; 复数[len-1]=“e”; 复数[len]='s'; 复数[len+1]='\0'; }否则{ 复数[len-1]='s'; 复数[len]='\0'; } printf(“名词%s的复数为%s\n”,名词,复数); 返回0; }

为什么printf输出中有一个新行? #包括 #包括 #包括 内部主(空){ 字符名词[25]; 字符复数[28]; fgets(名词,24,标准术语); strcpy(复数,名词); int len=strlen(复数); if(复数[len-2]='h'| |复数[len-2]=='s'){ 复数[len-1]=“e”; 复数[len]='s'; 复数[len+1]='\0'; }else if(复数[len-2]='y'){ 复数[len-2]=“i”; 复数[len-1]=“e”; 复数[len]='s'; 复数[len+1]='\0'; }否则{ 复数[len-1]='s'; 复数[len]='\0'; } printf(“名词%s的复数为%s\n”,名词,复数); 返回0; },c,printf,C,Printf,输出总是这样的: 名词horse的复数形式 “是马” 即使我没有将\n放在printf的中间,也只是放在最后。fgets在您点击enter键时从stdin中拾取一个尾随的换行符。因此,名词以换行字符结尾那么您是否阅读了所用函数的手册页?提示:答案很容易在那里找到。提示:noon中有什么?我只在技术上使用strcpy(),不添加新行。你的strcpy调用写入的是复数,而不是noon@KeithThompson,那么这是不可操作的。谢谢你,我照Olaf说的做了,并发现了这一点,关于如何在scanf中

输出总是这样的:

名词horse的复数形式

“是马”


即使我没有将\n放在printf的中间,也只是放在最后。

fgets在您点击enter键时从stdin中拾取一个尾随的换行符。因此,名词以换行字符结尾

那么您是否阅读了所用函数的手册页?提示:答案很容易在那里找到。提示:
noon
中有什么?我只在技术上使用strcpy(),不添加新行。你的
strcpy
调用写入的是
复数,而不是
noon
@KeithThompson,那么这是不可操作的。谢谢你,我照Olaf说的做了,并发现了这一点,关于如何在scanf中将输入限制为25个字符的任何帮助。是这个scanf(“%25s”,名词)
    #include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){

    char noun[25];
    char plural[28];

    fgets(noun,24,stdin);
    strcpy(plural,noun);
    int len=strlen(plural);

    if(plural[len-2]=='h'||plural[len-2]=='s'){
        plural[len-1]='e';
        plural[len]='s';
        plural[len+1]='\0';
    }else if(plural[len-2]=='y'){
        plural[len-2]='i';
        plural[len-1]='e';
        plural[len]='s';
        plural[len+1]='\0';
    }else{
        plural[len-1]='s';
        plural[len]='\0';
    }

    printf("The plural of noun %s is %s\n",noun,plural);
    return 0;
}