为什么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; }
输出总是这样的: 名词horse的复数形式 “是马”为什么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中
即使我没有将\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;
}