标题: [已解决] 请问,循环和判断怎么发挥作用呢? [打印本页]
作者: zzz19760225 时间: 2024-8-24 14:52 标题: [已解决] 请问,循环和判断怎么发挥作用呢?
本帖最后由 zzz19760225 于 2024-8-25 18:11 编辑
编译也通过了,网上询问说if会跑得飞快,会过去不起作用。
按照while为1的真无限循环,if内外都有printf发言,为什么不起作用呢?
怎么实现鼠标点左键就加1,鼠标点右键就减1那样呢?- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <graphics.h>
- int main ()
- {
- int a=0;
- MOUSEMSG msg = GetMouseMsg();
- while(1){
- if(msg.uMsg == WM_LBUTTONDOWN){
- a=a+1;
- printf("123%d",a);
- }
- }
- printf("456%d",a);
- return 0;
- }
复制代码
作者: HOPE2021 时间: 2024-8-24 19:38
本帖最后由 HOPE2021 于 2024-8-24 19:47 编辑
回复 1# zzz19760225
虽然我没有用过 EasyX,但您的代码是肯定跑不起来的。您的代码目前存在的问题已经用注释标注了- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <graphics.h>
- int main ()
- {
- int a=0;
- MOUSEMSG msg = GetMouseMsg(); // <- 只读取了一次鼠标操作,然后直接进入了循环体,导致整个程序在做没有意义的循环 ①
- while(1){
- if(msg.uMsg == WM_LBUTTONDOWN){ // <- 一直在判断 ① 中已经获取到的鼠标事件,而没有获取新的事件,要么一直加一直到 CPU 核心 100%,要么一直循环但什么都不干
- a=a+1;
- printf("123%d",a);
- }
- }
- printf("456%d",a); // <- 这句永远不会执行
- return 0;
- }
复制代码
按照您的设想,代码应该这样写:- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <graphics.h>
-
- int main ()
- {
- int a = 0;
- MOUSEMSG msg = GetMouseMsg();
-
- while (1)
- {
- msg = GetMouseMsg();
- if (msg.uMsg == WM_LBUTTONDOWN)
- {
- a++;
- printf("123%d\n",a);
- }
- else if (msg.uMsg == WM_RBUTTONDOWN) // 右键事件(我没有用过 EasyX,我是看 Win32API 文档改的,如有错误,请见谅。)
- {
- a--;
- printf("123%d\n",a);
- }
- else // 其他鼠标事件
- {
- // 如果要退出,请删除下一行的注释
- break;
- }
- }
-
- printf("456%d\n",a);
- return 0;
- }
复制代码
如果这样还是不行的话,可能是您选用 EasyX 的 API 不对,您可以尝试使用 Windows 内置的 ReadConsoleInput() 和 GetNumberOfConsoleInputEvents() 函数。
作者: zzz19760225 时间: 2024-8-24 20:47
本帖最后由 zzz19760225 于 2024-8-24 20:52 编辑
谢谢这位大侠!
编译通过了- Deleting intermediate files and output files for project 'a2b7 - Win32 Debug'.
- --------------------Configuration: a2b7 - Win32 Debug--------------------
- Compiling...
- a2b7.cpp
- Linking...
-
- a2b7.exe - 0 error(s), 0 warning(s)
复制代码
程序打开的界面点左键没有反应,点右键直接显示退出内容。- Press any key to continue
复制代码
应该是逻辑路线问题。
我看10行以内的批处理还好些,超出就心慌。现在这些抄写的内容太多了,大概要消化消化。
批处理的goto标签跳形式简单些,到c语言就不好用了,别的又不会用。有些什么问题挡在其中
后面还是继续琢磨抄写的代码,应该大部分需求在其中(还需要一个循环变量怎么编织为一体)。
一个连环画显示功能的软件,用户自己制作图画,类似FLASH那种自己制作内容的工具。用户只要有一个软件,不用管软件,只要制作内容,就可以发挥生命生活空间的丰富。一个自我绘画燃烧的自由空间(假设)- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <graphics.h>
-
- #ifdef _MSC_VER
- #pragma warning(disable:4996)
- #endif
-
- int main ()
- {
- #ifdef UNICODE
- wchar_t str[1024]={0};
- #else
- char str[1024]={0};
- #endif
-
- initgraph(1200, 700);// 初始化图形模式
- int a = 0;
-
- while (!kbhit() || (unsigned)getch() != 27) {// 无限循环,直到用户按下ESC键
- //cleardevice();// 清除屏幕
- MOUSEMSG msg = GetMouseMsg();// 鼠标状态
- if (msg.uMsg == WM_LBUTTONDOWN)
- {// 检查是否有鼠标点击
-
- #ifdef UNICODE
- swprintf(str,111,L"三国演义-铁笼山%d.jpg",a);
- #else
- sprintf(str,"三国演义-铁笼山%d.jpg",a);
- #endif
-
- IMAGE img;
- loadimage(&img,str,1200,500);
- putimage(0, 0, &img);
-
- #ifdef UNICODE
- swprintf(str,111,L"三国演义-铁笼山%d.txt",a);
- #else
- sprintf(str,"三国演义-铁笼山%d.txt",a);
- #endif
-
- FILE *fp; //创建一个文件指针*fp
- char ch;
- fp=fopen(str,"r"); //以只读方式打开D:\data.txt文件
- if(fp==NULL)
- printf("can not open!\n"); //如果fp指针指向为空,即文件为空,则输出can not open
- else{//读取字符:fscanf(fp,"%c",&ch),ch=fgetc(fp);
- fscanf(fp,"%c",&ch); //读取字符
- while(!feof(fp)){ //feof()这个函数是用来判断指针是否已经到达文件尾部
- putchar(ch); //输出
- fscanf(fp,"%c",&ch); //再次读取字符
- }
- fclose(fp); //关闭文件
- }
- }
-
- if (msg.uMsg == WM_RBUTTONDOWN)
- {// 如果是右键点击
-
- #ifdef UNICODE
- swprintf(str,111,L"三国演义-铁笼山%d.jpg",a);
- #else
- sprintf(str,"三国演义-铁笼山%d.jpg",a);
- #endif
-
- IMAGE img;
- loadimage(&img,str,1200,500);
- putimage(0, 0, &img);
-
- #ifdef UNICODE
- swprintf(str,111,L"三国演义-铁笼山%d.txt",a);
- #else
- sprintf(str,"三国演义-铁笼山%d.txt",a);
- #endif
-
- FILE *fp; //创建一个文件指针*fp
- char ch;
- fp=fopen(str,"r"); //以只读方式打开D:\data.txt文件
- if(fp==NULL)
- printf("can not open!\n"); //如果fp指针指向为空,即文件为空,则输出can not open
- else{//读取字符:fscanf(fp,"%c",&ch),ch=fgetc(fp);
- fscanf(fp,"%c",&ch); //读取字符
- while(!feof(fp)){ //feof()这个函数是用来判断指针是否已经到达文件尾部
- putchar(ch); //输出
- fscanf(fp,"%c",&ch); //再次读取字符
- }
- fclose(fp); //关闭文件
- }
- }
- //FlushBatchDraw();// 刷新屏幕显示
- }
- closegraph();// 关闭图形模式
- return 0;
- }
复制代码
作者: HOPE2021 时间: 2024-8-25 06:25
回复 3# zzz19760225
程序打开的界面点左键没有反应,点右键直接显示退出内容。
Press any key to continue
应该是逻辑路线问题。
应该不会啊,我写了一个相似逻辑的程序,一点问题都没有。您可以检查一下您控制台的“快速编辑”模式是否已经关闭(用于读取鼠标事件),以及您的 EasyX 本地文档的说明(我看网上说 EasyX 已将 GetMouseMsg() 废弃)。- #include <stdio.h>
- #include <Windows.h>
-
- int main(int argc, char* argv[])
- {
-
- HANDLE hConsole = 0;
- INPUT_RECORD irBuffer;
- DWORD dwNumberOfEventsRead=0;
- DWORD dwNumberOfEvents=0;
-
- hConsole=GetStdHandle(STD_INPUT_HANDLE);
-
- while (1)
- {
- GetNumberOfConsoleInputEvents(hConsole,&dwNumberOfEvents);
- if (dwNumberOfEvents==0)
- {
- printf("无事件。\n");
- }
- else
- {
- ReadConsoleInput(hConsole,&irBuffer,1,&dwNumberOfEventsRead);
-
- if (irBuffer.EventType == KEY_EVENT)
- {
- printf("键盘事件。\n");
- }
- else if (irBuffer.EventType == MOUSE_EVENT)
- {
- printf("鼠标事件。按钮状态:%d,控制键状态:%d,鼠标事件类型:%d,鼠标坐标:{%d, %d}\n",
- irBuffer.Event.MouseEvent.dwButtonState,
- irBuffer.Event.MouseEvent.dwControlKeyState,
- irBuffer.Event.MouseEvent.dwEventFlags,
- irBuffer.Event.MouseEvent.dwMousePosition.X,
- irBuffer.Event.MouseEvent.dwMousePosition.Y);
- }
- else
- {
- printf("其他事件。\n");
- }
- }
- Sleep(50);
- }
-
-
- return 0;
- }
复制代码
作者: zzz19760225 时间: 2024-8-25 07:31
本帖最后由 zzz19760225 于 2024-8-25 08:01 编辑
“
应该不会啊,我写了一个相似逻辑的程序,一点问题都没有。您可以检查一下您控制台的“快速编辑”模式是否已经关闭(用于读取鼠标事件),以及您的 EasyX 本地文档的说明(我看网上说 EasyX 已将 GetMouseMsg() 废弃)。
”
非常大的可能,是那个旧内容丢弃的问题。
(用你我他人人平等称呼就好,人人皆世间一石头)
勾选旧的选项,不选择EasyX那个每次运行安装的,在运行显示上好像还是差不多。感觉进入了一个坑
我准备退回到基本的程序逻辑单元上,找可行的练习,已有的先放一放,回头有了练级的内容再来看,那样会好些。否则心里没底,慌慌的,得多练习。老油条了,才能克服这种慌乱。这个练习的过程不能省
- 其他事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{58, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{56, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{55, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{54, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{51, 11}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{49, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{49, 10}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{49, 9}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{49, 9}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 9}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 9}
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 8}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 8}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 8}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:2,控制键状态:32,鼠标事件类型:0,鼠标坐标:{50, 10}
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:0,鼠标坐标:{50, 13}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 13}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{50, 23}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{49, 24}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{48, 26}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{45, 27}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{40, 29}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{31, 30}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{21, 30}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{15, 31}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{10, 30}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{7, 30}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{5, 31}
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{6, 34}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{14, 35}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{36, 37}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{72, 40}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{105, 41}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{116, 40}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{116, 41}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 41}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{100, 50}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{82, 51}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{75, 51}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{66, 52}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{63, 53}
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{63, 55}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{63, 56}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 其他事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 其他事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{79, 177}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{86, 177}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{103, 174}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{115, 171}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{117, 171}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{118, 171}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 197}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 198}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 199}
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 201}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 202}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 203}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{119, 208}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{118, 209}
- 鼠标事件。按钮状态:0,控制键状态:32,鼠标事件类型:1,鼠标坐标:{116, 210}
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 其他事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
- 无事件。
复制代码
作者: zzz19760225 时间: 2024-8-25 09:09
回复 zzz19760225
应该不会啊,我写了一个相似逻辑的程序,一点问题都没有。您可以检查一下您控制台的 ...
HOPE2021 发表于 2024-8-25 06:25
你的程序,很准确反应了信息。(也许左右键解决有望!不用去练习了)
作者: HOPE2021 时间: 2024-8-25 10:18
回复 5# zzz19760225
您可能需要:https://www.runoob.com/cprogramming/c-loops.html
作者: zzz19760225 时间: 2024-8-25 11:24
回复 zzz19760225
您可能需要:
HOPE2021 发表于 2024-8-25 10:18
是啊,基本逻辑和基本功知识是个硬伤,想取巧,最终在遇到的问题面前躲不过去的。
作者: idwma 时间: 2024-8-25 13:02
推荐一个搜示例的方法
https://grep.app/search?q=GetMouseMsg%28%29
作者: zzz19760225 时间: 2024-8-25 18:17
推荐一个搜示例的方法
idwma 发表于 2024-8-25 13:02
请问,如果要搜索汇编语言显示图片的方向类内容,怎么搜索呢?
作者: idwma 时间: 2024-8-25 20:59
啊这么深入吗,试试先用C写好再用编译器看汇编码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |