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;
} 展开
下面是我写的代码,不知道哪里出错了,写下来感觉没有啥问题,可是输入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;
} 展开
5个回答
展开全部
#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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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();都可以完成这项工作.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将
scanf("%d",&N);
语句之后加一清空键盘缓冲区的语句 fflush(stdin);,即:
scanf("%d",&N);
fflush(stdin);
scanf("%d",&N);
语句之后加一清空键盘缓冲区的语句 fflush(stdin);,即:
scanf("%d",&N);
fflush(stdin);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询