C语言的一到题目,将一行字符 每个英文的首字母改成大写字母

题目要求是这样的:要求用户输入N,代表输入N次,每次一行字符。每一行中的英文单词首字母都改成大写。下面是我写的代码,不知道哪里出错了,写下来感觉没有啥问题,可是输入1直接... 题目要求是这样的:要求用户输入N,代表输入N次,每次一行字符。每一行中的英文单词首字母都改成大写。
下面是我写的代码,不知道哪里出错了,写下来感觉没有啥问题,可是输入1直接跳过了gets,输入2又将一次输入的两个英文字母分开输出。
#include <stdio.h>
#include <stdlib.h>

int main()
{
char s[100];
int N;
scanf("%d",&N);
int i,k;
for(i=0;i<N;i++)
{
s[0]='\0'; //初始化字符数组
gets(s);
if((s[0]>='a')&&(s[0]<='z')) //把第一个字母改成大写
s[0]-=('a'-'A');
for(k=1;s[k]!='\0';k++)
{
if((s[k-1]==' ')&&(s[k]!=' ')&&(s[k]>='a')&&(s[k]<='z')) //改单词的首字母
s[k]-='a'-'A';
}
puts(s);
}
return 0;
}
展开
 我来答
风若远去何人留
推荐于2018-03-20 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部

输入N的回车 被第一个gets读走了。

加一个getchar就好了。 

scanf("%d",&N);
getchar();
.....
xoaxa
2015-06-23 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3406万
展开全部
#include <stdio.h>

int main() {
char s[100];
int N;
scanf("%d",&N);
int i,j;
for(i = 0; i < N; i++) {
s[0] = '\0';   //初始化字符数组
fflush(stdin); // 清除输入缓冲区中的残留
gets(s);
if((s[0] >= 'a') && (s[0] <= 'z'))  //把第一个字母改成大写
s[0] -= 'a' - 'A';
j = 1;
while(s[j]) {
if((s[j - 1] == ' ') && (s[j] >= 'a') && (s[j] <= 'z'))  //改单词的首字母
s[j] -= 'a' - 'A';
++j;
        }
        puts(s);
    }
    return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2f3950c
2015-06-23 · TA获得超过474个赞
知道小有建树答主
回答量:201
采纳率:33%
帮助的人:101万
展开全部
#include <stdio.h>
#include <stdlib.h>
#define row 10
#define column 100
void transform(char s[][column],int n)
{
 
 getchar();//清空缓冲区换行符
 for(int i=0;i<n;i++)
 {
  printf("请输入第%d次字符:\n",i+1);
  gets(s[i]);
  printf("第%d次转换结果是:",i+1);
  if(s[i][0]>='a' && s[i][0]<='z')
  {
   s[i][0]=s[i][0]-('a'-'A');
   printf("%s\n",s[i]);
  }
 }
}

int main()
{
 char s[row][column];
    int N;
 printf("请确定您的输入次数:\n");
    scanf("%d",&N); 
 transform(s,N); 
  return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可爱的御坂
2015-06-23
知道答主
回答量:20
采纳率:0%
帮助的人:15.3万
展开全部
#include <stdio.h>
#include <stdlib.h>

int main()
{
char s[100];
int N;
scanf("%d", &N);
fflush(stdin);
int i, k;
for (i = 0; i<N; i++)
{
s[0] = '\0';   //初始化字符数组
gets(s);
if ((s[0] >= 'a') && (s[0] <= 'z'))  //把第一个字母改成大写
s[0] -= ('a' - 'A');
for (k = 1; s[k] != '\0'; k++)
{
if ((s[k - 1] == ' ') && (s[k] != ' ') && (s[k] >= 'a') && (s[k] <= 'z'))  //改单词的首字母
s[k] -= 'a' - 'A';
}
puts(s);
}
return 0;
}


改完了,你需要清理一下输入的缓冲区,否则你的gets读入的是你伤一个输入完1后的回车,用fflush(stdin);或者getchar();都可以完成这项工作.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笃侠6A
2015-06-23 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3224万
展开全部

scanf("%d",&N);
语句之后加一清空键盘缓冲区的语句 fflush(stdin);,即:
scanf("%d",&N);
fflush(stdin);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式