题目说了计算结果不超过双精度范围,要用数据类型double,你用的 float时单精度范围,数据大时溢出了。
附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。赞助多少都可以。多谢。
谢谢!能麻烦问下第二题吗? 另外我刚用这个软件要怎样才能赞助积分呢?
第二题代码能看清,但代码前面的输入和代码后面的结果看不清。能截大一点的图吗?
我也不知道该如何赞助积分和C币。几年没登录了,搞不清门道了。以前我回答过很多问题,也没记录了。
没有积分没关系啊。
这样的评论可以发图。看了代码是把小写字母转为大写字母。还是需要大一点的图看前面和后面才知道是什么问题。
7-8单词首字母大写(15分) 本题目要求编写程序,输入-行字符,将每个单词的首字母改为大写后输出。所谓“单词” 是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以多个.
输入格式:How are you? 输出格式How Are You?
测试多个空格,长短字符串的时候显示答案错误
谢谢了!
有几个方面的问题。
1. 代码太复杂。太复杂就容易考虑不周到。需要分治(devide and conquer)。这样不需要把很多复杂的问题放一起思考。
2. 可以定义一个函数专门把单词首字母大写。主函数就值考虑输入和输出以及调用这个函数。
3. 你的代码读一个字符就写出去,屏幕太乱,看不清。我喜欢读一行再处理。
4. 你有的地方遇到费字母字符没有输出,直接扔掉,然后读下一个字符。扔掉字符会造成输出字符少了。而且如果行尾有空格,你还要读,但是没字符了。
下面代码运行通过了。你看一看是不是你想要的。
#include <stdio.h>
#include <stdlib.h>
char* capitalize(char* line)
{
int start = 1;
char* p;
while (*(p = line++))
{
if (start && *p >= 'a' && *p <= 'z')
*p -= 32;
start = *p == ' ' || *p == '\t';
}
}
int main(void)
{
char buffer[1024];
size_t size = 0;
size_t len = 0;
char* line = buffer;
printf("Please enter a line:\n");
len = getline(&line, &size, stdin);
capitalize(line);
printf("After capilalizing words:\n%s\n", line);
return 0;
}
// output
Please enter a line:
How are you!
After capilalizing words:
How Are You!