为什么我这个c++程序运行后直接关掉了窗口,就是应该运行出来了,但是还没来得及看结果就被自动关了

程序代码如下:
#include "stdafx.h"
#include
#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
double daphne = 100.0;
double cleo = 100.0;
const double rate_1 = 0.1;
const double rate_2 = 0.05;
double year = 0;
double temp = cleo - daphne;
while (temp <= 0)
{
year++;
daphne = daphne + daphne*rate_1*year;
double k = pow(1 + rate_1, year);
cleo = cleo*k;
temp = cleo - daphne;
}

cout << "after " << year << " years, cleo has more money than daphne! " << endl;
cout << "the money of daphne is: " << daphne << endl;
cout << "the money of cleo is: " << cleo << endl;
return 0;

}
求解答!!谢谢大神

4个回答

没有等待键盘输入 所以闪退 ,运行了以后直接退出了 暂停一下咯 。最后加一行代码就可以了。

return 0;
前添加

getchar();

这样不会直接退出,你点击键盘后才会退出控制台;
或者你可以调试模式运行,在return 0;前打断点,会自动运行到断点,停住。

在return 0;前面加system("pause");让程序暂停。不然运行完直接就结束掉了

sinat_31601333
Mokoa 回复Kobe___Bryant:程序运行结束窗口就是要自动关掉的,没有加的话其实是编译器自动帮你加了,有些不帮你加的话就直接程序跑完就正常退出了啊没有必要暂停的,所以你如果想看结果的话要让它暂停在退出之前
接近 4 年之前 回复
baidu_24736703
Kobe___Bryant 谢谢,解决了,我多次碰到这个问题,请问能解释一下原因吗??
接近 4 年之前 回复

一闪而过是程序自动结束,同时编译器没有提供结果驻留功能。对于此种情况,可以手动在代码结尾增加驻留功能的函数。常用的有如下两种:

1 通过getch函数驻留。
getch会等待从屏幕的输入,在main函数退出前,增加
getch();
调用,系统会等待输入,直到有新的输入,才会退出界面。

2 通过system("pause");来实现驻留。
在main退出前调用
system("pause");
会调用系统的pause函数,提示并实现按任意键退出程序效果。

如果是已经编译好的C语言程序,可以通过开始->运行,键入cmd后回车。
在打开的命令行窗口,将可执行文件拖动到窗口上,再回车即可运行该程序,在此窗口不会出现闪退,从而观察运行结果。

由于该问题仅在windows平台出现,所以以上介绍均针对windows平台。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么我这个c++程序运行后直接关掉了窗口,就是应该运行出来了,但是还没来得及看结果就被自动关了
程序代码如下: #include "stdafx.h" #include <iostream> #include <cmath> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { double daphne = 100.0; double cleo = 100.0; const double rate_1 = 0.1; const double rate_2 = 0.05; double year = 0; double temp = cleo - daphne; while (temp <= 0) { year++; daphne = daphne + daphne*rate_1*year; double k = pow(1 + rate_1, year); cleo = cleo*k; temp = cleo - daphne; } cout << "after " << year << " years, cleo has more money than daphne! " << endl; cout << "the money of daphne is: " << daphne << endl; cout << "the money of cleo is: " << cleo << endl; return 0; } 求解答!!谢谢大神
关于基础C程序添加任务计划运行后窗口不显示问题
用C语言写了一个关于关机的小程序,XP系统直接运行达到预期效果了,如果添加一个任务计划来运行这个程序显示的窗口就只有cmd“shutdown”的倒计时窗口,cmd窗口和问“是否关机”的对话框都不显示,请问怎么办才能让对话框显示出来? 下面是代码 #include <stdio.h> #include <conio.h> #include <Windows.h> int main(void) { system("shutdown -s -f -t 10"); int msgboxID = MessageBox(NULL, TEXT("现在关机?"), TEXT("自动关机程序"), MB_ICONASTERISK |MB_TOPMOST| MB_OKCANCEL); switch (msgboxID) { case IDCANCEL: system("shutdown -a"); MessageBox(NULL, TEXT("请稍后自行关闭电脑"), TEXT("自动关机程序"), MB_TOPMOST|MB_OK); break; case IDOK: system("shutdown -a"); system("shutdown -p -f"); break; default: break; } return 0; }![图片](https://img-ask.csdn.net/upload/201710/19/1508388782_798723.jpg)
c++builder 关闭程序,终止运行
我在新建的窗口上新建一个按钮,点击按钮结束程序运行,这个功能应该怎么实现
c++第二次运行程序时不能使用第一次运行输入的数据
最近学校要求做了一个学生信息系统,在第一次运行程序时输入了一个学生的信息,可以对这个学生的信息进行处理。但是关闭调试窗口后再运行一次程序就不能对上一次输入的数据进行操作了。 这是第一次运行 ![图片说明](https://img-ask.csdn.net/upload/201906/17/1560739652_323987.png) 这是第二次运行 ![图片说明](https://img-ask.csdn.net/upload/201906/17/1560739725_200823.png) 代码
.NET WinForm程序运行“未响应”问题
之前给单位管理部门做了一个小型管理软件,采用WPF开发(基本界面,无特效),C#语言,实现增删查功能。 程序正常运行流程(顺序)如下:首先加载Login窗口,用户正确登录后打开Main窗口,Login窗口关闭,用户在Main窗口中进行数据处理(增删改)。 用户一直用的不错(用户电脑为Windows 7专业版 32位系统),上周五都能正常使用,本周一使用时出现问题,具体表现如下: Login窗口能正常加载,正常登录后Main窗口打开,但是窗口内容空白(没有任何控件,正常情况有个Menu控件和几个Label控件)。当鼠标第二次点击Main窗口时窗口标题栏显示“(未响应)”。我在Login窗口特别测试了一下用错误账号或密码登录都会返回正确的提示(Login窗口运行正常)。 还有一点就是当Main窗口出现“未响应”状态时,CPU占用瞬间达到100%,但是随后会降下来。然后程序依然是“未响应”,Login窗口不关闭,与Main窗口共存。 用户机器用360清理系统后重启,不运行其他程序问题依旧。在程序卸载里查看上周五以后没有安装新的程序和更新。 求大神解疑!!!
c#2015中止调试后多个文档窗口自动关闭并且打不开了
![图片说明](https://img-ask.csdn.net/upload/201901/30/1548821929_260621.png) 正常调试成功运行后关闭程序,则IDE界面文窗口中所有打开的文档自动关闭了 (实际上是隐藏了),再次想要打开原文档编辑时,在解决方案资源管理器 中双击原来打开过的文件时不能打开文档。再次调试也会出错了,报找不到文件。 解决方法是执行窗口/关闭所有文档,这样才可打开文档,编辑运行了。 如此会操作繁琐,这是什么问题?
VS2013下C#程序运行第一次错误,第二次正常
编译成功后的程序,第一次启动时会弹出窗口“The operation could not be completed.另一个程序正在使用此文件,进程无法访问。”点击确定关闭弹出窗口后,再次点击vs的启动,就可以正常运行程序。这是什么错误,是什么原因造成的?谢谢!
VS2013打开的控制台窗口关不掉是什么原因?
从现有代码创建项目,VC++控制台应用程序项目,空项目 编译通过后,添加了一个main函数,作为入口。 在项目属性,连接器,高级,入口点,将main函数设置为入口点 ``` int _tmain() { return 0; } ```。 main函数无任何操作,直接return。 运行后,发现自动打开的控制台窗口一直不退出,程序也没有退出, 手动关闭窗口后程序退出。 想请问下为什么回出现这种现象?
求助:win10 64 +vs2013,最简单的"hello world"C程序编译后没有输出
RT,小弟前段时间升级了WIN10,然后在用win10编程的时候就出现了一些问题…… 某一次曾经在程序运行过程中,等输出等的不耐烦然后手贱把dos窗口直接关了,之后就开始出问题了 最简单的hello world 程序,没有报错,可以编译通过,但是运行后弹出的dos窗口里没有输出,连按任意键关闭的提示都没有…… ![图片说明](https://img-ask.csdn.net/upload/201512/10/1449716497_858290.png) ![图片说明](https://img-ask.csdn.net/upload/201512/10/1449716512_115747.png) 求解救,已经卡在这个问题好几天了……
求修改一下这个程序,有两个小问题
主要问题是:1、插入新的事件时,原有事件的优先级变化出错,例如,在原有优先级分别为1、2的事件中,插入另一个优先级为2的事件,前者应变为1,3,而程序结果为3,3 2、关闭运行程序的窗口,再打开,无法读取之前的数据 程序如下: [c语言实验报告:电子记事本的实现](http://wenku.baidu.com/link?url=24bhatClSMniDLFpWxjmlFtNaMqMfhJ46Z7-4lB1mqnpFaZHpjPvSWoXumD7ew8YuFNHEJthrSNO-9wkgKL9y1UAVc1-RnGB756EhR6jx-S "")
C程序内存不能为read错误,包含文件和内存操作
各个方法每个都没问题,放一块儿就冒出个不明原因的错误 ```C #include <stdio.h> #include <math.h> #include <time.h> //get time difference //days from 2015/6/9 to here. int getTD(); //free()! char* getTextFileContent(char*); long getFileSize(FILE*); //free()! char* mStrCat(char*, char*); int main() { int TD = getTD() + 1; char buf[100]; getcwd(buf, 100); char *listPath = mStrCat(buf, "\\plan.txt"); //DEBUG printf("%s\r\n", listPath); char* text = getTextFileContent(listPath); free(listPath); printf("%s", text); text = (text == NULL) ? "" : text; system("cls"); printf("高考后第[ %d ]天\r\n", TD); printf("Tasks:\r\n %s\r\n", text); system("pause & exit"); free(text); return 0; } int getTD() { struct tm tmptm = {0, 0, 0, 9, 5, 2015 - 1900}; long startT = mktime(&tmptm); long nowT = time(NULL); //seconds long TDs = nowT - startT; //days double TDd = (double)TDs; TDd = TDd / (60 * 60 * 24); TDd = floor(TDd); return (int)TDd; } char* getTextFileContent(char *path) { FILE *fp = fopen(path, "r"); if(fp == NULL) return NULL; long size = getFileSize(fp); int chLen = sizeof('\0'); char *ptr = (char*)malloc(size + chLen); //block 作为这块内存区的起始指针将被作为字符串指针返回,ptr 经过运算后将指向内存区结尾。 char *block = ptr; if(ptr == NULL) { return NULL; } int c; char ch; //依次将fgetc 获得的字符填入内存区。 while((c = fgetc(fp)) != EOF) { ch = (char) c; memcpy(ptr, &ch, chLen); //移动ptr 到下一个待填入的地址。 (int)ptr += chLen; } char endC = '\0'; memcpy(ptr, &endC, chLen); return block; } long getFileSize(FILE* f) { long size = (fseek(f, 0L, SEEK_END) != 0) ? (ftell(f)) : -1; rewind(f); return size; } char* mStrCat(char *str1, char *str2) { int str1Len = strlen(str1) + 1; int str2Len = strlen(str2) + 1; int byteNum = (str1Len + str2Len - 1) * sizeof(char); char *block = (char*)(malloc(byteNum)); if(block == NULL) return NULL; memmove(block, str1, str1Len * sizeof(char)); strcat(block, str2); return block; } ``` 文件内容可以正常输出,说明文件读取的部分大概没问题,mStrCat 经测试也没发现问题,但程序死活执行不到 system("cls") ,一到这儿Windows就会弹窗提示。 ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770423_486685.png) 文件内容可以正常输出: ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770417_925756.png) 另外,运行程序的时候360报毒了,一个QVM。。。,然后运行几次之后那个cmd窗口无法关闭了(点什么都没反映,但光标在闪)。打开的任务管理器也变成了这样: ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770593_655782.png) 自然,没能杀掉cmd,最后连资源管理器都不正常了,通过重启解决。(一个小练习而已杀伤力没这么大吧) P.S. 通过TCC 编译 ----------------------------------------------- 改动后的getTextFileContent 代码:(实际上没什么改动,但至少能用了) ``` char* getTextFileContent(char *path) { FILE *fp = fopen(path, "r"); if(fp == NULL) return NULL; long size = getFileSize(fp); int chLen = sizeof(char); char *ptr = (char*)malloc(size + chLen); char *block = ptr; if(ptr == NULL) { return NULL; } int c; char ch; while((c = fgetc(fp)) != EOF) { ch = (char)c; memcpy(ptr, &ch, chLen); ptr += chLen; } ch = '\0'; memcpy(ptr, &ch, chLen); fclose(fp); return block; } ``` 文件大小为275b 时读取汉字都没问题(I don't know why ...),但到1.27k(全英文)时就又冒出了内存不能为written 错误,一瞬间想到当初在Android 上写的个文件复制程序会不时的冒出Segmentation Fault…… 哪位大神来搭救一下!
qtcreator 运行程序时可以构建通过,但总是程序异常结束
大神们,能帮我看看是哪的问题吗?最近在帮老师做项目,完不成的话会挨批的,然而qtcreator一直有问题啊啊啊,所以我很着急,希望大家能多多帮忙,谢谢大家了~~~!!!!新手没有钱,希望大家还是帮忙看看,好人会有福报的~~ qtcreator+MSVC2013+opencv2.4.9 构建时没有错误,但构建完成后程序总会异常结束,截图如下:![图片说明](https://img-ask.csdn.net/upload/201508/09/1439111989_302326.png) 我的.pro中的代码段如下: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = practice TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui INCLUDEPATH+=.\ D:/opencv-2.4.9/build/include/opencv2\ D:/opencv-2.4.9/build/include/opencv\ D:/opencv-2.4.9/build/include CONFIG(release,debug|release) { LIBS+=D:/opencv-2.4.9/build/x64/vc12/lib/opencv_calib3d249.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_contrib249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_core249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_features2d249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_flann249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_gpu249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_highgui249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_imgproc249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_legacy249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_ml249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_objdetect249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_ts249.lib D:/opencv-2.4.9/build/x64/vc12/lib/opencv_video249.lib } CONFIG(debug,debug|release) { LIBS+=D:/opencv-2.4.9/build/x64/vc12/lib/opencv_calib3d249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_contrib249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_core249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_features2d249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_flann249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_gpu249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_highgui249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_imgproc249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_legacy249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_ml249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_objdetect249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_ts249d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_*d.lib\ D:/opencv-2.4.9/build/x64/vc12/lib/opencv_video249d.lib } mainwindow.cpp如下: #include "mainwindow.h" #include "ui_mainwindow.h" #include "opencv2/opencv.hpp" #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/nonfree/nonfree.hpp> using namespace cv; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); Mat image=imread("church01.jpg"); } MainWindow::~MainWindow() { delete ui; } 只是在默认的情况下加了一个读程序的代码行Mat image=imread("church01.jpg");而已 如果把这一行去掉的话,则显示的mainwindow界面是这样的,我感觉有些异常: ![图片说明](https://img-ask.csdn.net/upload/201508/09/1439112313_545386.png) 关闭mainwindow窗口后,应用输出显示: C:\Users\lolo\Desktop\build-practice-Desktop_Qt_5_5_0_MSVC2013_64bit-Debug\debug\practice.exe exited with code 0 然后我就不知道这是怎么回事了,我是基于VS2013的qtcreator,我没有对qtcreator构建和运行那进行配置,都是默认的,如下: ![图片说明](https://img-ask.csdn.net/upload/201508/09/1439112586_128883.png) 大神们,能帮我看看是哪的问题吗?最近在帮老师做项目,完不成的话会挨批的,所以我很着急,希望大家能多多帮忙,谢谢大家了~~~!!!!
win32程序怎么连接数据库并验证正确性
###运行后虽然有界面出现,但是输入了用户名和密码后就卡住了一会,然后退出了,messagebox也没有显示,求大佬点拨,下面是代码: ``` #include <windows.h> #include "resource.h" //....... //资源 BOOL REGISTEWIN(HINSTANCE hInstance,LPSTR lpClassName, WNDPROC wndProc); void SHOWWND(HWND hwnd); void MESSAGE(); void Link(); LRESULT CALLBACK MYPROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam); LRESULT CALLBACK SCREEAN1PROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam); LRESULT CALLBACK DialogProc1(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam); BOOL Check(SQLHSTMT hStmt); HWND hwndup; HWND hwnd; RETCODE retcode; HINSTANCE hInstance; SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; char users[255]={0}; char password[255]={0}; //winmain主程序 int WinMain(HINSTANCE hInstance,HINSTANCE hinstance,LPSTR lpCmdLine,int nShowCmd){ char* name = "name"; char* screen1 = "screen1"; //创建对话框,并判断对话框是否注册成功 HWND hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG2),GetDesktopWindow(),(DLGPROC)DialogProc1); if(!hdlg) MessageBox(hwnd,"error","error",MB_OK); SHOWWND(hdlg); //创建管理界面 hwndup = CreateWindow(screen1,TEXT("图书管理界面"),WS_OVERLAPPEDWINDOW,500,100,500,700,NULL,LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)),hInstance,NULL) ; MESSAGE(); return 0; } //DialogProc1函数 LRESULT CALLBACK DialogProc1(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam){ switch (msg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: { switch (LOWORD(wparam)) { case IDOK: { HWND h1=NULL; HWND h2=NULL; h1=GetDlgItem(hdlg,0x00009c40) ; h2=GetDlgItem(hdlg,0x00009c41) ; if(h1==NULL&&h2==NULL) printf("GetDlgItem fail!"); //获得user和password SendMessage(h1,WM_GETTEXT,255,(LPARAM)users); SendMessage(h2,WM_GETTEXT,255,(LPARAM)password); printf("%s %s\n",users,password); // // //就是这里,,,,想通过数据库查找user和password // // if(Check(hdlg)==TRUE) MessageBox(hdlg,"error","账户或密码不正确",MB_OK); DestroyWindow(hdlg); hdlg = NULL; hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DialogProc1); ShowWindow(hdlg,SW_SHOW); } break; case IDCANCEL: { //点击取消按钮关闭对话框,最后关闭窗口 EndDialog(hdlg, IDCANCEL); } break; } } break; case WM_SYSCOMMAND: { if (wparam == SC_CLOSE) { EndDialog(hdlg,TRUE); } } break; } return (INT_PTR)FALSE; } //检查user和password函数 BOOL Check(SQLHSTMT hStmt) { Link(); char * person1 = "select *from Login where users='"; const char * person2 = "' and password="; strcat(person1,users); strcat(person1,person2); strcat(person1,password); SQLRETURN ret = SQLExecDirect(hStmt,(SQLCHAR*)person1,strlen(person1)); if (ret == SQL_SUCCESS) return TRUE; else return FALSE; } void MESSAGE(){ MSG msg = {0}; while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg);//分发消息,将消息分发给回调函数,回调函数callback处理完后,返回给dispatchmessage函数,再继续进行消息循环 } } void Link(){ // UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "db_mrbm",//数据源名称 szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = "0922"; //1.连接数据源 //1.环境句柄 retcode = SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); //2.连接句柄 retcode = SQLAllocHandle(SQL_HANDLE_DBC,henv, &hdbc1); retcode = SQLConnect(hdbc1, szDSN, 13, szUID, 2, szAuthStr,4); //判断连接是否成功 if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO)){ MessageBox(hwnd,"连接错误","error",MB_OK); }else{printf("连接!/n");} // } ```
VS2015在安装过程中的问题
使用VS2015建完C#windows窗体项目后,就弹出一个窗口说程序出现问题,停止运行,然后就关闭了,请问这个可以修复吗,已经重装了两次了,还是不行,不过安装完之后都出现这个,安装的时候连着网,不知道该怎么修复![图片说明](https://img-ask.csdn.net/upload/201703/11/1489234703_955757.png)
QT 中直接修改方式修改一个widget对象中定义的共有成员变量无法修改,求解答
本人是刚刚接触Qt不久的小菜鸡,弄了一个简单地操作数据库的程序,其中登录需要根据不同角色显示不同的窗口,并把登录账号作为参数传递到子窗口(因为后面我打算设计一个修改密码的功能),我的思路是:创建两个Qt设计师界面类的对象:Login和Customer,Login作登录窗口,其中定义客户窗口Customer c;而在Customer中我定义一个int型的公有成员变量ID,用来存储当前登录的用户ID(就是登录账号);登录窗口的登录按钮的槽函数会根据选择的角色以及输入的账号和密码是否正确来选择显示相应的操作界面(在这里我仅仅做了客户的),然后将成功登录时使用的ID,直接赋值给c.ID,然后关闭登录界面。 但是在我的试验中,我想把这个值显示在一个标签中,却在c窗口中显示是一个随机数,而我直接用c.ID=500,得到的结果依然是标签中显示的还是一个随机数,这也就意味着**我直接给公有成员变量赋值的语句根本没有起作用**,这是为什么,我又该怎么解决这个问题。我的数据库链接是成功的,而且登录功能已经能够实现。最关键的是**这个是可以通过编译,只是运行时无法达到功能** 以下是我的部分代码(主函数和连接数据库的文件我就不发了): ``` #ifndef LOGIN_H #define LOGIN_H #include <QWidget> #include <customer.h> namespace Ui { class Login; } class Login : public QWidget { Q_OBJECT public: explicit Login(QWidget *parent = 0); ~Login(); private slots: void on_pushButton_clicked(); private: Ui::Login *ui; Customer c; }; #endif // LOGIN_H #include "login.h" #include "ui_login.h" #include <QMessageBox> #include <QSql> #include <QSqlQuery> Login::Login(QWidget *parent) : QWidget(parent), ui(new Ui::Login) { ui->setupUi(this); } Login::~Login() { delete ui; } void Login::on_pushButton_clicked() { if(ui->comboBox->currentText()==tr("请选择登录角色")) { QMessageBox::critical(0,tr("登录失败"),tr("请选择正确的登录角色"),QMessageBox::Cancel); } if(ui->comboBox->currentText()==tr("超级管理员登录")) { QSqlQuery query; bool suc=false; query.exec("SELECT * FROM Administrator"); while(query.next()) { if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text())) { QMessageBox::information(0,tr("登陆成功"),tr("超级管理员:%1 登陆成功").arg(query.value(0).toString())); this->close(); suc=true; break; } } if(!suc) QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel); } if(ui->comboBox->currentText()==tr("调度管理员登录")) { QSqlQuery query; bool suc=false; query.exec("SELECT * FROM Dispatcher"); while(query.next()) { if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text())) { QMessageBox::information(0,tr("登陆成功"),tr("调度管理员:%1 登陆成功").arg(query.value(2).toString())); this->close(); suc=true; break; } } if(!suc) QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel); } if(ui->comboBox->currentText()==tr("车队管理员登录")) { QSqlQuery query; bool suc=false; query.exec("SELECT * FROM Manager"); while(query.next()) { if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text())) { QMessageBox::information(0,tr("登陆成功"),tr("车队管理员:%1 登陆成功").arg(query.value(2).toString())); this->close(); suc=true; break; } } if(!suc) QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel); } [color=#FF0000]//仅试验了客户这一块,出现了问题 if(ui->comboBox->currentText()==tr("客户登录")) { QSqlQuery query; bool suc=false; query.exec("SELECT * FROM Customers"); while(query.next()) { if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text())) { QMessageBox::information(0,tr("登陆成功"),tr("客户:%1 登陆成功").arg(query.value(2).toString())); this->close(); //c.ID=query.value(0).toInt(); c.ID=10000; suc=true; break; } } if(suc) { c.show(); } else QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel); } } //Login.cpp #ifndef CUSTOMER_H #define CUSTOMER_H #include <QWidget> namespace Ui { class Customer; } class Customer : public QWidget { Q_OBJECT public: int ID; explicit Customer(QWidget *parent = 0); ~Customer(); private: Ui::Customer *ui; }; #endif // CUSTOMER_H #include "customer.h" #include "ui_customer.h" Customer::Customer(QWidget *parent) : QWidget(parent), ui(new Ui::Customer) { ui->setupUi(this); ui->label->setText(tr("当前ID:%1").arg(ID)); } Customer::~Customer() { delete ui; } //Customer.cpp ``` 多谢大神帮助,感激不尽
C# 无法触发窗口弹出 show方法不生效
要做一个基于UDP的群聊加私聊程序,群聊已经实现了,私聊也已经单独实现了,但是我想让着两个窗体有联系,就想QQ一样,PC1发消息的时候,PC2 自动弹出消息窗口。 登录窗体: using System.Net; namespace NetMeetingExample { public partial class FormLogin : Form { public FormLogin() { InitializeComponent(); } private void Login_Load(object sender, EventArgs e) { this.textBox1.Text = Dns.GetHostName().ToString(); } public static string nicheng; public static string group; private void button1_Click(object sender, EventArgs e) { nicheng = textBox1.Text; group =comboBox1.Text; //this.Opacity = 0; this.DialogResult = DialogResult.OK; } private void button2_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } } } 群聊窗体: using System.Net; using System.Net.Sockets; using System.Threading; namespace NetMeetingExample { public partial class FormMeeting : Form { private enum ListBoxOperation { AddItem, RemoveItem }; private delegate void SetListBoxItemCallback( ListBox listbox, string text, ListBoxOperation operation); SetListBoxItemCallback listBoxCallback; //使用的IP地址 private IPAddress broderCastIp = IPAddress.Parse("224.100.0.1"); //使用的接收端口号 public static int port = 8001; private UdpClient udpClient; public FormMeeting() { if (FormLogin.group=="101021") { broderCastIp = IPAddress.Parse("224.100.0.1"); } if (FormLogin.group == "101022") { broderCastIp = IPAddress.Parse("224.100.0.2"); } if (FormLogin.group == "101023") { broderCastIp = IPAddress.Parse("224.100.0.3"); } if (FormLogin.group == "101024") { broderCastIp = IPAddress.Parse("224.100.0.4"); } InitializeComponent(); listBoxCallback = new SetListBoxItemCallback(SetListBoxItem); this.Text = FormLogin.group; } private void SetListBoxItem(ListBox listbox, string text, ListBoxOperation operation) { string[] cc;//= splitString[1].Split('@'); if (listbox.InvokeRequired == true) { this.Invoke(listBoxCallback, listbox, text, operation); } else { if (operation == ListBoxOperation.AddItem) { if (listbox == listBoxAddress) { if (listbox.Items.Contains(text) == false) if (text != "") { { cc=text.Split('@'); string oo = cc[0]; listBoxMessage.Items.Add(oo+"进入。"); listbox.Items.Add(text); } } } else { if (text != "[]进入。") { listbox.Items.Add(text); // SetListBoxItem(listBoxMessage, // string.Format("[{0}]进入。",cc[0]), ListBoxOperation.AddItem); } } listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } else if (operation == ListBoxOperation.RemoveItem) { cc = text.Split('@'); // SetListBoxItem(listBoxMessage, // string.Format("[{0}]退出。", cc[0]), ListBoxOperation.AddItem); // // listBoxMessage.Items.Add(string.Format("[{0}]退出。", cc[0])); string oo = cc[0]; listBoxMessage.Items.Add(oo+"退出。"); listbox.Items.Remove(text); } } } public static void SendMessage(IPAddress ip, string sendString) { UdpClient myUdpClient = new UdpClient(); //允许发送和接收广播数据报 // myUdpClient.EnableBroadcast = true; //必须使用组播地址范围内的地址 IPEndPoint iep = new IPEndPoint(ip, port); //将发送内容转换为字节数组 byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sendString); try { //向子网发送信息 myUdpClient.Send(bytes, bytes.Length, iep); } catch (Exception err) { MessageBox.Show(err.Message, "发送失败"); } finally { myUdpClient.Close(); } } public static IPAddress ipp; private void FormMeeting_Load(object sender, EventArgs e) { listBoxMessage.HorizontalScrollbar = true; buttonLogin.Enabled = true; buttonLogout.Enabled = false; groupBoxRoom.Enabled = false; IPAddress[] iph = Dns.GetHostAddresses(Dns.GetHostName()); ipp = iph[iph.Length-2]; } /// <summary> /// 接收线程 /// </summary> private void ReceiveMessage() { udpClient = new UdpClient(port); //必须使用组播地址范围内的地址 udpClient.JoinMulticastGroup(broderCastIp); udpClient.Ttl = 50; IPEndPoint remote = null; while (true) { try { //关闭udpClient时此句会产生异常 byte[] bytes = udpClient.Receive(ref remote); string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length); string[] splitString = str.Split(','); int s = splitString[0].Length; //string[] splithostname; // splithostname= splitString[1].Split('@'); string[] mhost; mhost = splitString[1].Split('@'); switch (splitString[0]) { case "Login": //进入会议室 // SetListBoxItem(listBoxMessage, // string.Format("[{0}]进入。", splithostname[0]), ListBoxOperation.AddItem); SetListBoxItem(listBoxAddress, splitString[1], ListBoxOperation.AddItem); string userListString = "List," ; for (int i = 0; i < listBoxAddress.Items.Count; i++) { userListString += "," + listBoxAddress.Items[i].ToString(); } SendMessage(remote.Address, userListString); break; case "List": //参加会议人员名单 for (int i = 1; i < splitString.Length; i++) { SetListBoxItem(listBoxAddress, splitString[i], ListBoxOperation.AddItem); // SetListBoxItem(listBoxMessage, // string.Format("[{0}]进入。", splithostname[0]), ListBoxOperation.AddItem); } break; case "Message": //发言内容 SetListBoxItem(listBoxMessage, string.Format("[{0}]说:{1}", mhost[0], mhost[1]), ListBoxOperation.AddItem); break; case "Logout": //退出会议室 // SetListBoxItem(listBoxMessage, // string.Format("[{0}]退出。", FormLogin.nicheng), // ListBoxOperation.AddItem); // SetListBoxItem(listBoxMessage, // string.Format("[{0}]退出。", splithostname[0]), ListBoxOperation.AddItem); SetListBoxItem(listBoxAddress, FormLogin.nicheng + "@" + remote.Address.ToString(), ListBoxOperation.RemoveItem); break; case "mi": FormChat fc = new FormChat(); fc.Owner = this; fc.Show(); // MessageBox.Show("sfs"); break; } } catch { //退出循环,结束线程 break; } } } private void textBoxMessage_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) { if (textBoxMessage.Text.Trim().Length > 0) { SendMessage(broderCastIp, "Message," + FormLogin.nicheng+"@"+ textBoxMessage.Text); textBoxMessage.Text = ""; } } } //窗体已关闭并指定关闭原因前触发的事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (buttonLogout.Enabled == true) { MessageBox.Show("请先离开会议室,然后再退出!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); //不关闭窗体 e.Cancel = true; } } //单击进入会议室按钮触发的事件 private void buttonLogin_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; Thread myThread = new Thread(ReceiveMessage); myThread.Start(); //等待接收线程准备完毕 Thread.Sleep(1000); SendMessage(broderCastIp, "Login,"); buttonLogin.Enabled = false; buttonLogout.Enabled = true; groupBoxRoom.Enabled = true; // SetListBoxItem(listBoxMessage, // string.Format("[{0}]进入。", FormLogin.nicheng), ListBoxOperation.AddItem); SetListBoxItem(listBoxAddress, FormLogin.nicheng + "@" +ipp.ToString(), ListBoxOperation.AddItem); string userListString = "List," + FormLogin.nicheng + "@" + ipp.ToString(); SendMessage(broderCastIp , userListString); Cursor.Current = Cursors.Default; } //单击退出会议室按钮触发的事件 private void buttonLogout_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; SendMessage(broderCastIp, "Logout,"); udpClient.DropMulticastGroup(this.broderCastIp); //等待接收线程处理完毕 Thread.Sleep(1000); //结束接收线程 udpClient.Close(); buttonLogin.Enabled = true; buttonLogout.Enabled = false; groupBoxRoom.Enabled = false; Cursor.Current = Cursors.Default; } private void button1_Click(object sender, EventArgs e) { // string add = "sdfsdf-192.168.22.3"; //string[] omg = add.Split('@'); // MessageBox.Show(omg[1].ToString()); //FormChat FC = new FormChat(); // FC.Owner = this; // FC.Show(); } public static string[] omg; private void listBoxAddress_MouseDoubleClick(object sender, MouseEventArgs e) { string add = listBoxAddress.SelectedItem.ToString(); omg = add.Split('@'); FormChat fc = new FormChat(); fc.Owner = this; fc.Show(); } } } 私聊窗体 using System.Net; using System.Net.Sockets; using System.Threading; namespace NetMeetingExample { public partial class FormChat : Form { /// <summary>接收用</summary> private UdpClient receiveUdpClient; /// <summary>发送用</summary> private UdpClient sendUdpClient; /// <summary>和本机绑定的端口号</summary> private const int port = 18001; /// <summary>本机IP</summary> IPAddress ip; /// <summary>远程主机IP</summary> IPAddress remoteIp; public FormChat() { InitializeComponent(); IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); ip = ips[ips.Length - 1]; //为了在同一台机器调试,此IP也作为默认远程IP // remoteIp = ip; remoteIp = IPAddress.Parse(FormMeeting.omg[1]); textBoxRemoteIP.Text = FormMeeting.omg[1]; textBoxSend.Text = "你好!"; } private void buttonSend_Click(object sender, EventArgs e) { Thread t = new Thread(SendMessage); t.IsBackground = true; t.Start(textBoxSend.Text); } private void FormChat_Load(object sender, EventArgs e) { //创建一个线程接收远程主机发来的信息 Thread myThread = new Thread(ReceiveData); //将线程设为后台运行 myThread.IsBackground = true; myThread.Start(); textBoxSend.Focus(); } private void SendMessage(object obj) { string message = (string)obj; sendUdpClient = new UdpClient(0); byte[] bytes = System.Text.Encoding.Unicode.GetBytes(message); IPEndPoint iep = new IPEndPoint(remoteIp, port); try { sendUdpClient.Send(bytes, bytes.Length, iep); AddItem(listBoxStatus, string.Format("向{0}发送:{1}", iep, message)); ClearTextBox(); } catch (Exception ex) { AddItem(listBoxStatus, "发送出错:" + ex.Message); } } private void ReceiveData() { IPEndPoint local = new IPEndPoint(ip, port); receiveUdpClient = new UdpClient(local); IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); while (true) { try { //关闭udpClient时此句会产生异常 byte[] receiveBytes = receiveUdpClient.Receive(ref remote); string receiveMessage = Encoding.Unicode.GetString( receiveBytes, 0, receiveBytes.Length); AddItem(listBoxReceive, string.Format("来自{0}:{1}", remote, receiveMessage)); } catch { break; } } } delegate void AddListBoxItemDelegate(ListBox listbox, string text); private void AddItem(ListBox listbox, string text) { if (listbox.InvokeRequired) { AddListBoxItemDelegate d = AddItem; listbox.Invoke(d, new object[] { listbox, text }); } else { listbox.Items.Add(text); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } } delegate void ClearTextBoxDelegate(); private void ClearTextBox() { if (textBoxSend.InvokeRequired) { ClearTextBoxDelegate d = ClearTextBox; textBoxSend.Invoke(d); } else { textBoxSend.Clear(); textBoxSend.Focus(); } } private void button1_Click(object sender, EventArgs e) { FormMeeting.SendMessage(remoteIp, "mi," + "hello~"); // SendMessage(broderCastIp, "Message," + textBoxMessage.Text); } } } Program.cs static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FormLogin fl = new FormLogin(); if (fl.ShowDialog() == DialogResult.OK) { Application.Run(new FormMeeting()); } else { Application.Exit(); } 在私聊窗体里单击BUTTON1会向对端发送“mi”命令从而触发对端的窗体弹出,函数能进去,但窗体就是不弹出,另外将弹出写在button_click下,然后在mi下执行button的_click事件也不能触发,,但是单独单击却能打开,函数是能进来的 求高人解决。。。。。。。。。。
C# Datagridview滚动条的问题
写了个小的程序,基本上是: 1、注册键盘中的‘↑’触发关闭Form窗口; ``` Win32.RegisterHotKey(handle, (int)HotKeyID.CloseForm, (uint)KeyModifiers.None, Keys.Up); ``` 2、在Form中拦截该消息 ``` protected override void WndProc(ref System.Windows.Forms.Message e) { if(e.Msg == 0x0312) { if((LockHotKey.HotKeyID)m.WParam == HotKeyID.CloseForm) { this.Close(); } } base.WndProc(ref e); } ``` 3、运行程序,在Form中用鼠标按住Datagridview上的滚动条,同时按下键盘上的‘↑’,这时就会弹出错误 ![图片说明](https://img-ask.csdn.net/upload/201604/07/1460019436_640418.jpg)
关于在java应用中调用ssh的一个问题
由于我们的项目要用到ssh通信,所以需要在程序中调用ssh命令. 我采用的方式如下: try { String command = "ssh -2 -N -f -L 5000:122.204.142.54:8889 administrator@122.204.142.54 - i c:\\axrsa" ; // 注意:c:\\axrsa为一个秘钥文件 Runtime.getRuntime().exec(command); } catch (IOException e) { e.printStackTrace(); } 可是出现的问题是,老是连接不上去,但如果我把command行命令在运行里面手动输入,却可以成功.但是却关闭不了dos窗口.须强行关闭. 这个问题困扰了我好几天了,请大家帮我看看啊.我初步怀疑是不是exec返回的子进程的输出缓冲区太小的原因.因为如果连接成功的话,ssh会返回很多信息. [b]问题补充:[/b] 谢谢layer555 的热心回答. 但是我还是没有解决问题,我测试如下代码: [img]/upload/attachment/108471/9a175e66-162b-395b-8288-56b7e627a5e0.jpg[/img] 然后一运行,发现程序结束不了.经调试发现,执行到如下语句就出问题了. while ((line = error.readLine()) != null) { errorMessage.append(line); } 请问这是为什么? 谢谢大家
vs2010运行出席0xc000007b错误
本人电脑64位,安装的vs2010是32位,现在添加了fftw库函数,lib /def:libfftw3-3.def这种是在vs2010的兼容命令窗口进行的。 测试时用的是这个代码: #include "fftw3.h" #include <stdio.h> #define N 8 int main() { int i; fftw_complex *din,*out; fftw_plan p; din = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); if((din==NULL)||(out==NULL)) { printf("Error:insufficient available memory\n"); } else { for(i=0; i<N; i++)/*测试数据*/ { din[i][0] = i+1; din[i][1] = 0; } } p = fftw_plan_dft_1d(N, din, out, FFTW_FORWARD,FFTW_ESTIMATE); fftw_execute(p); /* repeat as needed */ fftw_destroy_plan(p); fftw_cleanup(); for(i=0;i<N;i++)/*OUTPUT*/ { printf("%f,%fi\n",din[i][0],din[i][1]); } printf("\n"); for(i=0;i<N;i++)/*OUTPUT*/ { printf("%f,%fi\n",out[i][0],out[i][1]); } if(din!=NULL) fftw_free(din); if(out!=NULL) fftw_free(out); getchar(); return 0; } ``` ``` 编译时没有错误,但是运行的时候出现错误:应用程序无法正常启动(0xc000007b),请单击确定关闭应用程序。 能帮忙找下原因吗?
c8051f020的12位AD采样
/******************************************************************************* 程序测量电压在外部ADC输入和打印   / /结果通过UART终端窗口。  / /系统时钟使用内部24.5 mhz振荡器成倍增加   / / 49 mhz的芯片上的锁相环。结果输出到UART的循环  / /设定的速度基于定时器2的延迟。这个循环定期读取  / / ADC值从一个全局变量,结果。 / / ADC使重复测量速度取决于SAMPLE_RATE使用   / /定时器3。每个ADC转换启动一个中断运行一个   / /平均函数。< INT_DEC >样品平均然后结果值更新。 / /每4的< INT_DEC >,你获得1点有效的决议。   / /例如,< INT_DEC > = 256获得你4位分辨率:4 ^ 4 = 256。 / / ADC输入多路复用器将是单端输入 ************************************************************************************/ #include <c8051f020.h> // SFR declarations #include <stdio.h> #include<intrins.h> /*******16位寄存器定义**********/ sfr16 ADC0 = 0xbe; //ADC0数据 sfr16 RCAP2 = 0xca; //定时器2自动重装 sfr16 RCAP3 = 0x92; //定时器3自动重装 sfr16 TMR2 = 0xcc; //定时器2 sfr16 TMR3 = 0x94; //定时器3 /**********全局常量***************/ #define BAUDRATE 115200 //串口通信的波特率 #define SYSCLK 22118400//外部晶振频率 #define SAMPLE_RATE 100000 //采样频率 #define INT_DEC 256 //积分抽取比采样并取平均值;由过采样并取平均值来提高ADC分辨率的相关 #define SAR_CLK 2500000 //ADC0转换时钟周期的计算 #define SAMPLE_DELAY 50 //采样之前的毫秒延时 sbit led = P1^6; //led = 1是否定 sbit sw1 = P3^7; //sw1 = 0转换开关 void PORT_INIT (void); void OSCILLATOR_INIT (void); void UART0_INIT(); void TIMER3_INIT(int counts); void ADC0_INIT(); void delay_ms(unsigned int ms); void delay4j(); /***********全局变量***********/ long result; // 减小的值 /*********主函数************/ void main() { long measurement; // 测量电压(mv) WDTCN = 0xde; //关闭看门狗 WDTCN = 0xad; OSCILLATOR_INIT(); //初始化晶振 PORT_INIT(); //交叉使能开关 UART0_INIT(); //初始化串口通信0; TIMER3_INIT(SYSCLK/SAMPLE_RATE);//初始化定时器3的溢出采样率 ADC0_INIT(); AD0EN = 1; //ADC0控制寄存器,使能ADC EA = 1; //打开所有中断(总体,但如果子中断关闭,那该中断依旧关闭) while(1) { EA = 0; //关闭中断 /*********12ADC的值是通过积分平均值的测量,数据存储在result中,为右对齐 AIN0.1的实测值为: Vref(mv) measure(mv) =----------------*result(bits) (2^12)-1(bits) ****************************/ measurement = result * 2430 / 4095; // measurement = result; EA = 1; //使能中断 printf("AIN0.1 voltage:%ld mv\n",measurement); // led = ~sw1; //LED反应状态的转换 // delay_ms(SAMPLE_DELAY);//延时50ms delay_ms(1); // delay4j(); } } /************交叉使能开关配置****************/ void PORT_INIT (void) { XBR0 = 0x04; // UART0 线路配置 XBR2 = 0x40; // 交叉使能,设置为弱上拉 P0MDOUT = 0x01; // enable TX0 as a push-pull output P1MDOUT = 0x40; // enable LED as push-pull output } /*************使用外部晶振作为系统时钟***********/ void OSCILLATOR_INIT (void) { int i; // delay counter OSCXCN = 0x67; // start external oscillator with // 22.1184MHz crystal for (i=0; i < 256; i++) ; // wait for oscillator to start while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle OSCICN = 0x88; // select external oscillator as SYSCLK // source and enable missing clock // detector } /************串口初始化****************/ void UART0_INIT() { SCON0 = 0x50; //UART0控制寄存器设置 TMOD = 0x20; //定时器1的方式寄存器 TH1 = -(SYSCLK/BAUDRATE/16); //定时器1波特率的重装值 CKCON = 0x10; //时钟控制寄存器设置,定时器1使用系统时钟 PCON = 0x80; //电源控制寄存器设置 TR1 = 1; //打开定时器1 TI0 = 1; //发送中断标志 } /*************定时器3的初始化*************/ void TIMER3_INIT(int counts) { TMR3CN = 0x02; //定时器3控制寄存器,停止定时器3,清除TF3,定时器3使用系统时钟 RCAP3 = -counts;//初始化定时器3重装 TMR3 = RCAP3; // 立即重新加载 EIE2 &= ~0x01; //扩展中断允许2寄存器 关闭所有中断 TMR3CN |= 0x04; //打开定时器3,且使用系统时钟 } /**************ADC0的初始化**********/ void ADC0_INIT() { ADC0CN = 0x04; //ADC0控制寄存器,禁止ADC0,一直跟踪方式, //ADC0没完成一次数据转换,当前没有进行数据转换 //定时器3溢出启动ADC0转换数据,ADC0H,ADC0L寄存器数据右对齐 REF0CN = 0x03; //关闭温度传感器,VREF输出缓冲区 AMX0CF = 0x00; //AIN为单端输入 AMX0SL = 0x03; //选择AIC0.1位模拟输入引脚 ADC0CF = (SYSCLK/SAR_CLK)<<3;//ADC转换时钟为2500000 ADC0CF |= 0x00; //设置转换时钟2500000,放大倍数为1 EIE2 |= 0x02; //允许ADC0数据转换结束产生中断请求 } /****************延时ms************/ void delay_ms(unsigned int ms) { CKCON &= ~0x20; // use SYSCLK/12 as timebase RCAP2 = -(SYSCLK/1000/12); // Timer 2 overflows at 1 kHz TMR2 = RCAP2; ET2 = 0; // Disable Timer 2 interrupts TR2 = 1; // Start Timer 2 while(ms) { TF2 = 0; // Clear flag to initialize while(!TF2); // Wait until timer overflows ms--; // Decrement ms } TR2 = 0; // Stop Timer 2 } /***************ADC0的中断*****************/ void ADC0_ISR (void) interrupt 15 { static unsigned int_dec=INT_DEC; // 集成计数器,当int_dec = 0时,置入一个新的结果 static long accumulator=0L; // 整合ADC采样,“0L”为将0转换成long型的 AD0INT = 0; // 清除AD数据转换成功标识符,重新开始下次采样 accumulator += ADC0; //读取ADC的值,并逐次累加 int_dec--; // 更新衰减计数器 if (int_dec == 0) // If zero, then post result { int_dec = INT_DEC; // Reset counter result = accumulator >> 8; accumulator = 0L; // Reset accumulator } } void delay4j() { _nop_(); _nop_(); _nop_(); _nop_(); } c8051f020的12位AD采样频率最高是100ksps,低频的时候可以,但是为什么转换频率为1kHZ的正弦波时数据会混乱呢,
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问