疑问,求助!

qq_38080117 2017-09-25 07:16:54
#include <stdio.h>
#include <time.h>
int main()
{
int u=0,v=0;
int c= getchar() ;
while (c!=EOF)
{

v=c=='O'? v+1:0;
u+=v;

}
printf("%d\n", u);
printf("Time used=%.2f\n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
这个程序输出超过了3秒,最重要的是输入字符后,再按下空格键则不能进行输入了,当然也没有输出!本题是输入'O'和‘X‘两个字符,O得一分,连续则依次加2分,3分。X得0分,之后如有O再从1分开始计算!看看哪里出错了,望大佬指点!
...全文
259 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38080117 2017-09-27
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
while是个死循环,你应该把getchar放到循环里,但是你每次输入后都会在缓冲区中留下一个换行符\n,所以你在下一次输入前需要前清空缓冲区
好像是这样的,太复杂以至于自己忘记了,
引用 9 楼 hou09tian 的回复:
[quote=引用 7 楼 qq_38080117 的回复:] [quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX” 此时,
int  c=  getchar() ;
代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)
中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
	while ((c = getchar()) != EOF)
	{
		v = c == 'O' ? v + 1 : 0;
		u += v;

	}
以下为输出界面
我的程序返回的是字符,你的反悔的是数字吗?我好像懂点了[/quote] 你说的返回值指的是。。。。[/quote]
引用 9 楼 hou09tian 的回复:
[quote=引用 7 楼 qq_38080117 的回复:] [quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX” 此时,
int  c=  getchar() ;
代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)
中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
	while ((c = getchar()) != EOF)
	{
		v = c == 'O' ? v + 1 : 0;
		u += v;

	}
以下为输出界面
我的程序返回的是字符,你的反悔的是数字吗?我好像懂点了[/quote] 你说的返回值指的是。。。。[/quote]就是与EOF比较的是数字还是字符
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。
棉猴 2017-09-26
  • 打赏
  • 举报
回复
引用 7 楼 qq_38080117 的回复:
[quote=引用 4 楼 hou09tian 的回复:] 1 问题分析 getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX” 此时,
int  c=  getchar() ;
代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)
中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
	while ((c = getchar()) != EOF)
	{
		v = c == 'O' ? v + 1 : 0;
		u += v;

	}
以下为输出界面
我的程序返回的是字符,你的反悔的是数字吗?我好像懂点了[/quote] 你说的返回值指的是。。。。
qq_38080117 2017-09-26
  • 打赏
  • 举报
回复
引用 4 楼 hou09tian 的回复:
1 问题分析 getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX” 此时,
int  c=  getchar() ;
代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)
中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
	while ((c = getchar()) != EOF)
	{
		v = c == 'O' ? v + 1 : 0;
		u += v;

	}
以下为输出界面
问个问题,为啥这个程序执行这么慢呢?还有人家回复我说运行结果不对,你知道错在哪里吗?
qq_38080117 2017-09-26
  • 打赏
  • 举报
回复
引用 4 楼 hou09tian 的回复:
1 问题分析 getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX” 此时,
int  c=  getchar() ;
代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)
中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。 2 问题解决 将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
	while ((c = getchar()) != EOF)
	{
		v = c == 'O' ? v + 1 : 0;
		u += v;

	}
以下为输出界面
我的程序返回的是字符,你的反悔的是数字吗?我好像懂点了
qq_38080117 2017-09-26
  • 打赏
  • 举报
回复
引用 2 楼 qq_38204686 的回复:
while循环的时候你倒是重新输入啊 重新getchar
谢谢
棉猴 2017-09-25
  • 打赏
  • 举报
回复
1 问题分析
getchar()在C程序中的功能是接收一个字符,所以,在程序中,假设输入是“XXOOOXOOOX”
此时,
int  c=  getchar() ;

代码获取的只是输入字符串的第一个字符,即'X',接下来
while (c!=EOF)

中,EOF的值是-1,而c的值是'X',而在while循环体中c的值不可能是EOF,while循环没有满足退出条件,所以相当于while是死循环,所以无法输出后面的信息。
2 问题解决
将getchar()作为while循环的条件语句,当输入时EOF时,退出while循环
	int c;
while ((c = getchar()) != EOF)
{
v = c == 'O' ? v + 1 : 0;
u += v;

}

以下为输出界面
paschen 2017-09-25
  • 打赏
  • 举报
回复
while是个死循环,你应该把getchar放到循环里,但是你每次输入后都会在缓冲区中留下一个换行符\n,所以你在下一次输入前需要前清空缓冲区
大米粥哥哥 2017-09-25
  • 打赏
  • 举报
回复
while循环的时候你倒是重新输入啊 重新getchar
qq_29846883 2017-09-25
  • 打赏
  • 举报
回复

while (c!=EOF)
这个循环条件意义是什么, 这里一直死循环,没有退出条件

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧