求帮助QVQ我开着串口啊……用VSPD设置了两个虚拟相连的串口,然后使用串口调试助手也可以互相发送信息。但是在C#里面设置老是显示——serialPort1.Write(outdata);端口被关闭……
我也算是按教材打的代码?= =
因为第一片段是利用SeriaPort控件查询方式,没有serialPort2_DataReceived,然后事件又需要绑定……第二片段,没有timer控件,但是之前给出的设计窗口又有它的存在……所以我两个结合了(。
代码如下
[mw_shl_code=csharp,true]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication0410
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//串口初始化
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
serialPort2.PortName = "COM2";
serialPort2.BaudRate = 9600;
serialPort2.Open();
}
//发送数据
private void button1_Click(object sender, EventArgs e)
{
string outdata = textBox1.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!", "");
}
serialPort1.Write(outdata);
}
//接收数据
private void timer1_Tick(object sender, EventArgs e)
{
string data;
data = serialPort2.ReadExisting();
textBox2.Text = textBox2.Text + data;
}
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string data;
data = serialPort2.ReadExisting();
this.Invoke(new EventHandler(timer1_Tick));
}
//关闭串口,退出程序
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
Close();
}
}
}[/mw_shl_code]
现在老大就坐我对面,简直要飙泪了(。
[查看全文]
本帖最后由 绯色の胖子 于 2015-6-12 18:10 编辑
大神们,这个程序编译没有错,运行强制停止,什么问题?运行的时候 点5 就是 添加后报道的学生 只要是添加 就出错停止运行
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
#define SIZE 7
struct student
{char num[20];
char name[10];
char time;
}std[SIZE];
void menu();
void dianming();
void absent();
void add();
void save();
void main()
{
int i,k;
FILE *fp;
if((fp=fopen("e:\\file20.txt","r"))==NULL)
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;i<SIZE;i++)
fscanf(fp,"%s %s %c",std.num,std.name,&std.time);
printf("**************************************************************************\n");
printf("**************************************************************************\n");
printf("****************************欢迎使用上课随机点名程序**********************\n");
printf("****** 输入1:显示所有同学点名情况 *********\n");
printf("****** 输入2:开始点名 *********\n");
printf("****** 输入3:更新文件 *********\n");
printf("****** 输入4:缺席同学的情况 *********\n");
printf("****** 输入5:添加后报道学生信息 *********\n");
printf("****** 输入6: 退出 *********\n");
printf("**************************************************************************\n");
while(1)
{printf("please choose ");
scanf("%d",&k);
switch(k)
{
case 1:
printf("number name Y or N\n");
for(i=0;i<SIZE;i++)
printf(" %s %s %c\n",std.num,std.name,std.time);
break;
case 2:
dianming();
break;
case 3:
save();
printf("****************************文件更新成功!退出请按5**************************\n");
break;
case 4: absent();
break;
case 5:
/*添加学生信息*/add();
break;
case 6:
exit(0);
}
fclose(fp);
}
}
void add()
{
FILE *fp;
int n,i;
struct student stu;
if((fp=fopen("e:\\file20.txt","a"))==NULL)
{
printf("文件打开失败\n");
exit(0);
}
else //如果文件已经存在,可以追加学生信息
{printf("请输入要添加的学生数量,按回车键确认:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个学生的学号 姓名 缺席情况,用空格分开,并按回车键确认:\n",i);
scanf("%s%s",stu.num,stu.name);
fprintf(fp,"%s %s %s\n",stu.num,stu.name,stu.time);
}
}
fclose(fp);
}
void dianming()
{int n,j,m;
printf("请输入数量:");
scanf("%d",&n);
j=rand()%7;/*调用rand函数进行点名*/
for(j=0;j<n;j++)
{ printf(" %s %s ",std[j].num,std[j].name);
printf("缺席请按1否则请按2:");
scanf("%d",&m);
if(m==1)
std[j].time='Y';
else
if(m==2)
printf("没有缺席");}
}
void absent()
{int i;
for(i=0;i<SIZE;i++)
if(std.time!='N')
printf(" %s %s %c\n",std.num,std.name,std.time);
}
void save()
{int i;
FILE *fp;
if((fp=fopen("e:\\file20.txt","w+"))==NULL)
{printf("文件打开失败\n");
exit(0);}
for(i=0;i<SIZE;i++) {fprintf(fp,"%s %s %c\n",std.num,std.name,std.time);
}}
[查看全文]
话说本宅之前学习C语言的时候,用的是Turbo C,考试的时候是VC++,可那时候用的是WinXP啊!如今换了64位Win8,TC完全用不了了啊!而且我又不喜欢用VC(MS软件总是让人感到别扭),听人说eclipse开发C程序不错,我想听听大神们的建议。另外,如果有Linux下的C语言开发程序,也可以给我推荐下,反正别让我用VC就好了。
[查看全文]