输入多组字符串数组,以END结束,

#include
#include
int main()
{
char s[100][100];
char p="END";
int i,j;
i=0;
do{gets(s[i]);}while(strcmp(s[i++],p)!=0);

}
这段代码有问题么,这是输入部分????感觉看着非常非常正常啊,

c

2个回答

p是一个字符不能存放“END”三个字母吧?应该把p定义成指针才对?

zuoside__lord
咱可是贤狼赫萝 谢谢啊,太久没有写c语言,,,,,,,,,,,忘记了,尴尬,
2 年多之前 回复

p是一个字符不能存放“END”三个字母,应该把p定义成指针才对.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言输入字符串时输入指定的字符停止输入问题。
问题描述 寻找若干行文本中最长的一行 输入说明 输入为多个字符串(每个字符串长度不超过100个字符),每个字符串占一行,输入的行为“***end***”时表示输入结束 输出说明 输出其中最长的一行长度后换行再输出最长行的内容,如果最长行不止一个,则输出其中的第一行。 输入样例 abce abdf dlfd ***end*** 当 ``` char a[100][100]; int i,j,n,m=0; for(i=0;;i++) {gets(a[i]); if(m=(strcmp(a[i],"***end***"))==0) break;} ``` 可以从循环中出来 但当 ``` for(i=0;;i++) {gets(a[i]); if(a[i]=="***end***") break; ``` 就不行,一直处于循环中; 以下是全代码,请大神们帮看看有什么问题,oj上一直是结果错误 ``` #include<stdio.h> #include<string.h> int main() { char a[100][100]; int i,j,n,m=0; for(i=0;;i++) {gets(a[i]); if(m=(strcmp(a[i],"***end***"))==0) break;} for(j=0;j<i;j++) { if(strlen(a[j])<strlen(a[j+1])) n=j+1; else n=j;} printf("%d\n%s",strlen(a[n]),a[n]); return 0; } ```
JAVA,当键盘输入多行字符串时,如何停止输入。
Scanner in=new Scanner(System.in); String[] input = new String[26]; for(int i = 0; input[i] != "end"; i++){ input[i] = in.next(); } in.close(); ---------- 想要达到的效果:执行程序后由键盘输入: thisisthefistline thisisthesecondline end 结束输入,进入下一行程序。 但是事实上,即使输入了end,按下回车后,依然可以继续输入字符串和回车。 想要知道,如果我需要使这个代码停下来执行下一段代码,在for中应该用什么替换“input[i] != "end"”,以及相应的是如何停止键盘录入的?
对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO
1.问题:IP地址判断 描述 在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。合法的IP是这样的形式: A.B.C.D 其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。现在,请你来完成这个判断程序吧 输入 输入由多行组成,每行是一个字符串,输入由“End of file”结束。字符串长度最大为30,且不含空格和不可见字符。 输出 对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO 样例 输入 输出 202.115.32.24 YES a.b.c.d NO End of file 2.我自己写的一段代码 ``` #include <stdio.h> #include <string.h> int main() { char c[35]; int i, d1, d2, d3, mid, zhi1, zhi2, zhi3, zhi4, oo,gd=0, m; while (1) { for (i = 0; i <= 35; i++) { c[i] = -1; } //初始化 i = 0; m = 0; while (c[m] != '\n') { c[i] = getchar(); m = i; i++; } oo = m - 1; if (strcmp(c, "End of file") == 0) break; else { for (i = 0; i <= 35; i++) //字符转成数字 { c[i] = c[i] - 48; } for (i = 0; i <= oo; i++) { if ((c[i] >= 10 || c[i] < 0) && c[i] != '.' - 48) gd++; } if (gd != 0 || (c[oo] < 0 || c[oo]>9)) { mid = 0; goto end; } //找到小数点。格式不符合规范就结束 for (d1 = 0; d1 <= 35; d1++) { if (c[d1] == '.' - 48) break; } for (d2 = d1 + 1; d2 <= 35; d2++) { if (c[d2] == '.' - 48) break; } for (d3 = d2 + 1; d3 <= 35; d3++) { if (c[d3] == '.' - 48) break; } if (d1 == 36 || d2 == 36 || d3 == 36 || d1 == 0 || d2 - d1 == 1 || d3 - d2 == 1 || d1 >= 4 || d2 - d1 - 1 >= 4 || d3 - d2 - 1 >= 4 || oo - d3 >= 4) { mid = 0; goto end; } //下面判断输入的值是否符合规范 //第一段 if (d1 == 3) { if (c[0] == 0 || (c[0] == 0 && c[1] == 0)) { mid = 0; goto end; } else zhi1 = c[0] * 100 + c[1] * 10 + c[2]; } else if (d1 == 2) { if (c[0] == 0) { mid = 0; goto end; } else zhi1 = c[0] * 10 + c[1]; } else if (d1 == 1) { zhi1 = c[0]; } //第二段 if (d2 - d1 == 4) { if (c[d1 + 1] == 0 || (c[d1 + 2] == 0 && c[d1 + 1] == 0)) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 100 + c[d1 + 2] * 10 + c[d1 + 3]; } else if (d2 - d1 == 3) { if (c[d1 + 1] == 0) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 10 + c[d1 + 2]; } else if (d2 - d1 == 2) { zhi2 = c[d1 + 1]; } //第三段 if (d3 - d2 == 4) { if (c[d2 + 1] == 0 || (c[d2 + 1] == 0 && c[d2 + 2] == 0)) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 100 + c[d2 + 2] * 10 + c[d2 + 3]; } else if (d3 - d2 == 3) { if (c[d2 + 1] == 0) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 10 + c[d2 + 2]; } else if (d3 - d2 == 2) { zhi3 = c[d2 + 1]; } //第四段 if (oo - d3 == 3) { if (c[d3 + 1] == 0 || (c[d3 + 1] == 0 && c[d3 + 2] == 0)) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 100 + c[d3 + 2] * 10 + c[d3 + 3]; } else if (oo - d3 == 2) { if (c[d3 + 1] == 0) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 10 + c[d3 + 2]; } else if (oo - d3 == 1) { zhi4 = c[d3 + 1]; } if (zhi1 >= 0 && zhi2 >= 0 && zhi3 >= 0 && zhi4 >= 0 && zhi1 <= 255 && zhi2 <= 255 && zhi3 <= 255 && zhi4 <= 255) { mid = 1; } else { mid = 0; } end: if (mid == 0) printf("NO\n"); else printf("YES\n"); } } return 0; } ``` 我试过了各种能想到的情况都是符合题目要求的,但是oj只给我了10.5/30分,我不知道有什么情况没有考虑到,求大神指点^o^。 ------------------------------------------------------------------------------- 谢谢大家,解决问题了^o^,循环的过程里面有变量的值改变了,我忘了在循环开始的时候初始化。不过还是谢谢大家的想法,我学到了很多呢!
字符串猜拳要稳赢,出问题了QAQ
## 稳赢 现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。 输入格式: 输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。 输出格式: 对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。 输入样例: 2 ChuiZi JianDao Bu JianDao Bu ChuiZi ChuiZi End 输出样例: Bu ChuiZi Bu ChuiZi JianDao ChuiZi Bu 我的做法程序清单: ``` #include<stdio.h> #include<string.h> int main() { int k; scanf("%d",&k); char honhu[10]; for(int i=0;;i++) { gets(honhu); getchar(); if(strcmp(honhu,"End")==0)break; if(k%i!=0) { if(strcmp(honhu,"Bu")==0)printf("JianDao\n"); else if(strcmp(honhu,"JianDao")==0)printf("ChuiZi\n"); else if(strcmp(honhu,"ChuiZi")==0)printf("Bu\n"); } else { if(strcmp(honhu,"Bu")==0)printf("Bu\n"); else if(strcmp(honhu,"JianDao")==0)printf("JianDao\n"); else if(strcmp(honhu,"ChuiZi")==0)printf("ChuiZi\n"); } memset(honhu,'\0',sizeof(honhu)); } } ``` 运行终端会停止工作,求救~
这个为什么输出不了啊
标题 寻找最长的行 类别 字符串 时间限制 1S 内存限制 1000Kb 问题描述 寻找若干行文本中最长的一行 输入说明 输入为多个字符串(每个字符串长度不超过100个字符),每个字符串占一行,输入的行为“***end***”时表示输入结束 输出说明 输出其中最长的一行长度后换行再输出最长行的内容,如果最长行不止一个,则输出其中的第一行。 输入样例 abce abdf dlfd ***end*** 输出样例 9 abdf dlfd #include<stdio.h> #include<string.h> int main() { char a[50][100]; int n,b[100]={0}; int i=0,j=0; while(1) { gets(a[i]); b[i]=strlen(a[i]); i++; if(a[i]=="***end***") break; } puts(a[i]); int max=b[0],k=0; for(j=0;j<i-2;j++) { if(b[j]<b[j+1]) { max=b[j+1]; k=j+1; } } printf("%d",max); puts(a[k]); return 0; } ``` ```
商品检索 具体的思路
Problem Description 沃尔玛公司由美国零售业的传奇人物山姆&#8226;沃尔顿先生于1962年在阿肯色州成立。经过四十多年的发展,沃尔玛公司已经成为美国最大的私人雇主和世界上最大 的连锁最大零售企业目前,沃尔玛在全球开设了7500家商场,员工总数210万人,分布在全球14个国家。每周光临沃尔玛的顾客1.75亿人次。 当然,每天卖出去的东西也是挺多的。那么就需要一个强大的商品检索系统了,能够快速的找到想找的商品,并且能够准确的给出此件商品的数目。假若,山姆先生找到了身为程序员的你,让你帮忙写个程序来完成这个--------人很难完成的任务。任务书如下: 任务名称 商品检索系统 任务提交方式 程序源码 任务输入 商品条形码 | 输入误差 5% 任务输出 对应商品数目 | 输出允许误差 0% Input 输入包括若干组测试数据,每组测试数据第一行两个正整数N,M。N代表所有商品的总件数,M代表要查询的商品件数。接下来N行,每行一个字符串S[ i ],代表第i个商品的名称。之后是M组条形码,每组条形码第一行一个数字n,代表条形码的条数,接下来n行,每行一条条形码,代表了一个字符,每组条形码代表了要查询的一种商品的名称。正确的商品名称中仅包含大写字母,小写字母以及数字。 Output 每组测试数据中,对于每个输入的条形码,输出一行数字,代表以查询的商品名称为前缀的商品的总件数,如果输入的条形码是错误的,则输出“wrong barcode!” 数据范围说明: N [1 , 10^5] 整数 M[1 , 10^6] 整数 Length(S[i]) [1 , 30] 整数 条形码条数[10 , 10^5] 实数 条形码输入说明: 输入的条形码,由两部分组成,第一部分是一个数字n,代表每组条形码的条数,接下来n行,每行由宽度不等的多个黑条和白条组成,黑条和白条的宽度与其标准值的误差不会超过5%,黑条代表1,白条代表0,白条标准条的宽度是黑条标准条宽度的一半。每8个黑白条占一行组成一个2进制的ASCII码,表示其所对应的字符。描述一个商品名称的正确条形码总是从“begin”开始,然后以“end”结束。 Sample Input 4 1 Onepiece Chair Plant Pen 16 10 20 20 10 10 10 20 10 10 20 20 10 10 20 10 20 10 20 20 10 10 20 20 20 10 20 20 10 20 10 10 20 10 20 20 10 20 20 20 10 10 20 10 10 20 20 20 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 20 10 20 20 20 10 10 10 10 10 20 20 10 20 10 10 20 10 20 20 10 10 20 10 20 10 20 20 10 10 10 20 20 10 20 20 10 10 20 10 20 10 20 20 10 10 20 10 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 10 Sample Output 1
商品检索 程序的设计
Problem Description 沃尔玛公司由美国零售业的传奇人物山姆&#8226;沃尔顿先生于1962年在阿肯色州成立。经过四十多年的发展,沃尔玛公司已经成为美国最大的私人雇主和世界上最大 的连锁最大零售企业目前,沃尔玛在全球开设了7500家商场,员工总数210万人,分布在全球14个国家。每周光临沃尔玛的顾客1.75亿人次。 当然,每天卖出去的东西也是挺多的。那么就需要一个强大的商品检索系统了,能够快速的找到想找的商品,并且能够准确的给出此件商品的数目。假若,山姆先生找到了身为程序员的你,让你帮忙写个程序来完成这个--------人很难完成的任务。任务书如下: 任务名称 商品检索系统 任务提交方式 程序源码 任务输入 商品条形码 | 输入误差 5% 任务输出 对应商品数目 | 输出允许误差 0% Input 输入包括若干组测试数据,每组测试数据第一行两个正整数N,M。N代表所有商品的总件数,M代表要查询的商品件数。接下来N行,每行一个字符串S[ i ],代表第i个商品的名称。之后是M组条形码,每组条形码第一行一个数字n,代表条形码的条数,接下来n行,每行一条条形码,代表了一个字符,每组条形码代表了要查询的一种商品的名称。正确的商品名称中仅包含大写字母,小写字母以及数字。 Output 每组测试数据中,对于每个输入的条形码,输出一行数字,代表以查询的商品名称为前缀的商品的总件数,如果输入的条形码是错误的,则输出“wrong barcode!” 数据范围说明: N [1 , 10^5] 整数 M[1 , 10^6] 整数 Length(S[i]) [1 , 30] 整数 条形码条数[10 , 10^5] 实数 条形码输入说明: 输入的条形码,由两部分组成,第一部分是一个数字n,代表每组条形码的条数,接下来n行,每行由宽度不等的多个黑条和白条组成,黑条和白条的宽度与其标准值的误差不会超过5%,黑条代表1,白条代表0,白条标准条的宽度是黑条标准条宽度的一半。每8个黑白条占一行组成一个2进制的ASCII码,表示其所对应的字符。描述一个商品名称的正确条形码总是从“begin”开始,然后以“end”结束。 Sample Input 4 1 Onepiece Chair Plant Pen 16 10 20 20 10 10 10 20 10 10 20 20 10 10 20 10 20 10 20 20 10 10 20 20 20 10 20 20 10 20 10 10 20 10 20 20 10 20 20 20 10 10 20 10 10 20 20 20 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 20 10 20 20 20 10 10 10 10 10 20 20 10 20 10 10 20 10 20 20 10 10 20 10 20 10 20 20 10 10 10 20 20 10 20 20 10 10 20 10 20 10 20 20 10 10 20 10 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 10 Sample Output 1
输入两个数输出这两个数的均值 输入个数或格式有误 提示输入错误使用trycatchfinally报错
package com.xmu.hellojava.main; import com.xmu.hellojava.domain.Student; import java.util.Scanner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class StudentTest { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //Calculating the average System.out.printf("Please enter two numbers:(Separated by spaces)\n");//Prompt message StudentTest t = new StudentTest(); System.out.println("Average Value:"+t.average()); //end calculating the average } public double average() throws IOException { double []result=new double[2]; while(true) { BufferedReader input5= new BufferedReader(new InputStreamReader(System.in)); String str=input5.readLine();//读取字符串 String[]new_str= str.split("\\s+");//以空格分割字符串 double []num=new double[new_str.length]; int flag=-1,flag1=-1;//用于判断输入结果是否正确 for (int i = 0; i<new_str.length; i++){ try { num[i]=Double.valueOf(new_str[i].toString()); flag1=2; } //end try catch (NumberFormatException e) { e.printStackTrace(); }//end catch }//将字符串转化为数,结束循环 finally{ try{ flag=new_str.length; if(flag!=2||flag1!=2){ Exception me=new Exception("Invalid input"); throw me; }//end if result[0]=num[0]; result[1]=num[1]; break; }//end try catch(Exception e) {//若输入个数或格式有误,提示用户输入错误 System.out.println(e.getMessage()+",try again\n");//Prompt message }//end catch }//end finally }//end while return (result[0]+result[1])/2.0; }//average }
C++小程序,调试。。。。。。
编写程序,输入若干个字符串。要求:(1)按字符串长度的大小升序输出各个字符串。(2)按字符串中字符的ASCLL码值大小升序输出各个字符串。为什么我输不出结果来???我该如何改呢?#include <string> #include <iostream> #include <algorithm> #include <vector> using namespace std; //比较函数,用于排序 bool compare(string a, string b) { //长度不一样的时候采用长度来排序 if (a.length() != b.length()) { return a.length() < b.length(); } //长度一样的时候采用ASCLL值排序 return a < b; } int main() {vector<string>list; string inputString; while (cin >> inputString) { //结束标志,测试方便,可以注释掉 if (inputString == "0") { break; } //加入到vector list.push_back(inputString); } //排序,系统方法 sort(list.begin(), list.end(), compare); //依次输出 for (unsigned int i = 0; i<list.size(); i++) { cout << list[i] << endl; } return 0; }
用javascript实现从1加到100的和,代码出错
农民工自学JS,谦卑地向各位请教, <script> start=prompt("请输入开始的值:"); end=prompt("请输入结束的值:"); alert("开始的值是:"+start); alert("结束的值是:"+end); alert("从"+start+"+到"+end+"的和="+sum); var sum=0 if (start≤end) sum+=start++ </script> 假如去掉最后三行代码,并且倒数第四行alert中的字符串结尾处,去掉+sum,程序是按照设想进行: 提示输入开始值-提示输入结束值-确认开始值-确认结束值-弹出alert对话框 加入最后三行代码,浏览器什么都不显示了, 已经折腾一晚上了,请会的朋友指点一下,万分感谢!
真的是想了好久 初学Java不会啊 求示例
生物学家使用字母A、C、T和G的序列来模拟一个基因组。基因是一个字符串 一个基因组,启动子ATG和结束一个三重标记,TAA前后,或TGA。此外, 一个基因的字符串的长度是3的倍数,和基因不包含任何的三胞胎ATG, 标签,TAA,或TGA。编写一个程序,提示用户输入一个基因组并显示所有 Sample runs: <output> Enter a genome string: TTATGTTTTAAGGATGGGGCGTTAGTT <enter icon> TTT GGGCGT <end output> <output> Enter a genome string: TGTGTGTATAT <enter icon>
初学者有关IO流统计成绩到另一个文件的问题
编写一个程序RecordScore.java用来记录某课程的成绩,要求从键盘输入学生姓名和成绩,每行输入一个学生的成绩,输入end#表示输入结束。程序要统计出课程的平均成绩,并将输入的学生成绩和平均成绩保存到soor.txt文件。(提示:字符串的方法 split(" ")可以返回字符串中以空格分割的字符串数组。如str="张三 80";String[] s= str.split(" ");则s[0]="张三",s[1]="80") 题目部分图片 ![图片说明](https://img-ask.csdn.net/upload/201605/11/1462959882_554426.jpg) 自己写的代码如下 package IOlianxi; import java.io.*; import java.util.*; public class RecordScore { public static void main(String[] args) { try { InputStreamReader str=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(str); BufferedWriter bw=new BufferedWriter(new FileWriter("E://soore.txt")); String st=null; String[] s=st.split(""); while(!(st=br.readLine()).equals("quit")){ bw.write(s); bw.newLine(); } br.close(); bw.close(); }catch (ArrayIndexOutOfBoundsException e){ System.out.println("没有指定文件"); }catch (Exception e) { e.printStackTrace(); } } } 但是这个代码是错的,好像不能方数组,这里报错后面都不知道怎么写了 ![图片说明](https://img-ask.csdn.net/upload/201605/11/1462959999_731411.jpg)、 都不知道怎么写了,求大神
用数据结构实现商品检索
Problem Description 沃尔玛公司由美国零售业的传奇人物山姆&#8226;沃尔顿先生于1962年在阿肯色州成立。经过四十多年的发展,沃尔玛公司已经成为美国最大的私人雇主和世界上最大 的连锁最大零售企业目前,沃尔玛在全球开设了7500家商场,员工总数210万人,分布在全球14个国家。每周光临沃尔玛的顾客1.75亿人次。 当然,每天卖出去的东西也是挺多的。那么就需要一个强大的商品检索系统了,能够快速的找到想找的商品,并且能够准确的给出此件商品的数目。假若,山姆先生找到了身为程序员的你,让你帮忙写个程序来完成这个--------人很难完成的任务。任务书如下: 任务名称 商品检索系统 任务提交方式 程序源码 任务输入 商品条形码 | 输入误差 5% 任务输出 对应商品数目 | 输出允许误差 0% Input 输入包括若干组测试数据,每组测试数据第一行两个正整数N,M。N代表所有商品的总件数,M代表要查询的商品件数。接下来N行,每行一个字符串S[ i ],代表第i个商品的名称。之后是M组条形码,每组条形码第一行一个数字n,代表条形码的条数,接下来n行,每行一条条形码,代表了一个字符,每组条形码代表了要查询的一种商品的名称。正确的商品名称中仅包含大写字母,小写字母以及数字。 Output 每组测试数据中,对于每个输入的条形码,输出一行数字,代表以查询的商品名称为前缀的商品的总件数,如果输入的条形码是错误的,则输出“wrong barcode!” 数据范围说明: N [1 , 10^5] 整数 M[1 , 10^6] 整数 Length(S[i]) [1 , 30] 整数 条形码条数[10 , 10^5] 实数 条形码输入说明: 输入的条形码,由两部分组成,第一部分是一个数字n,代表每组条形码的条数,接下来n行,每行由宽度不等的多个黑条和白条组成,黑条和白条的宽度与其标准值的误差不会超过5%,黑条代表1,白条代表0,白条标准条的宽度是黑条标准条宽度的一半。每8个黑白条占一行组成一个2进制的ASCII码,表示其所对应的字符。描述一个商品名称的正确条形码总是从“begin”开始,然后以“end”结束。 Sample Input 4 1 Onepiece Chair Plant Pen 16 10 20 20 10 10 10 20 10 10 20 20 10 10 20 10 20 10 20 20 10 10 20 20 20 10 20 20 10 20 10 10 20 10 20 20 10 20 20 20 10 10 20 10 10 20 20 20 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 20 10 20 20 20 10 10 10 10 10 20 20 10 20 10 10 20 10 20 20 10 10 20 10 20 10 20 20 10 10 10 20 20 10 20 20 10 10 20 10 20 10 20 20 10 10 20 10 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 10 Sample Output 1
easyX和vs打字游戏,为何第二关输入的字母显示是空格及如何按ese返回主菜单
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<graphics.h> //图形库 需要额外安装 #include <conio.h> #include <time.h> #include <windows.h> #include <string.h> #include <stdlib.h> #include <algorithm> #pragma comment(lib,"WinMM.Lib") #define _CRT_SECURE_NO_WARNINGS MOUSEMSG m; IMAGE background; IMAGE star[2]; int right = 0; int wrong = 0; char target; int x, y; struct letter//第一关字母结构体 { int x; int y; TCHAR target;//字符 }; struct letter array[5];//每次出现五个字母 struct TARGET//第二关单词结构体 { int x; int y; TCHAR str[20]; }; struct USERKEY//第二关保存用户输入得字母 { int x; int y; TCHAR str[20]; }userkey = { 100, 370, L" " }; void outtextxy_int(int x, int y, const char* format, int num)//输出整数 { char str[20] = " "; sprintf_s(str, format, num); outtextxy(x, y, TCHAR(str)); } void outtextxy_double(int x, int y, const char* format, double num)//输出浮点数 { char str[20] = " "; sprintf_s(str, format, num); outtextxy(x, y, TCHAR(str)); } void loadResource()//加载资源,把文字给图片 { loadimage(&background, L"键盘背景4.jpg", 1000, 650); loadimage(star + 0, L"星星掩码图.jpg", 80, 80); loadimage(star + 1, L"星星背景图.jpg", 80, 80); } //输出带星星的字母 void outtextimage(int x, int y, char target) { setbkmode(TRANSPARENT); putimage(x, y, star + 0, SRCAND); putimage(x, y, star + 1, SRCPAINT); settextstyle(25, 0, _T("宋体")); outtextxy(x + 35, y + 32, target); } //初始化五个坐标 void initArraychar(struct letter array[], int curPos) { //srand((unsigned int)time(NULL)); while (array[curPos].target == NULL || array[curPos].target == array[(curPos + 1) % 5].target || array[curPos].target == array[(curPos + 2) % 5].target || array[curPos].target == array[(curPos + 3) % 5].target || array[curPos].target == array[(curPos + 4) % 5].target) { array[curPos].target = rand() % 26 + 65; } while (array[curPos].x == array[(curPos + 1)].x || array[curPos].x == array[(curPos + 2)].x || array[curPos].x == array[(curPos + 3)].x || array[curPos].x == array[(curPos + 4)].x) { array[curPos].x = rand() % 800; } array[curPos].y = rand() % 80 - 100; } void Pause()//按空格键暂停 { IMAGE img; //准备图片 loadimage(&img, L"f.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(750, 130, 950, 190); fillrectangle(750, 210, 950, 270); TCHAR ch[] = _T("SNAP____"); settextstyle(35, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR begin[] = _T("继续游戏"); TCHAR go[] = _T("返回主菜单"); setbkmode(TRANSPARENT); outtextxy(750 + 10, 130 + 10, begin); outtextxy(750 + 10, 210 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏 { setlinecolor(RED); rectangle(750, 130, 930, 190); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏 { setlinecolor(RED); rectangle(750, 210, 930, 270); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(750, 130, 930, 190); rectangle(750, 210, 930, 270); } } } //开始画键盘 void keyboard() { IMAGE img; //准备图片 loadimage(&img, L"键盘背景4.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 setbkmode(TRANSPARENT); putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 int i, j, k, m, n; char one[] = { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P' };//第一行 char two[] = { 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L' };//第二行 char three[] = { 'Z', 'X', 'C', 'V', 'B', 'N', 'M' }; char four[] = { '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+' }; char five[] = { '`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=' }; char oneend[] = { '{', '}', '|' }; char oneend1[] = { '[', ']', '\\' }; char three1[] = { ':', '"' }; char three2[] = { ';', '\'' }; char h1[] = { '<', '>', '?' }; char h2[] = { ',', '.', '/' }; setcolor(WHITE); rectangle(220 - 100, 600 - 50 - 100, 290 - 100, 640 - 50 - 100); //Tab(220,550),(290,590) line(220 - 100, 600 - 150, 220 - 3 - 100, 603 - 150); line(220 - 3 - 100, 603 - 150, 220 - 100 - 3, 643 - 150); line(220 - 100, 640 - 150, 220 - 3 - 100, 643 - 150); line(290 - 100, 640 - 150, 293 - 100, 643 - 150); line(220 - 3 - 100, 643 - 150, 293 - 100, 643 - 150); line(290 - 100, 600 - 150, 293 - 100, 603 - 150); line(293 - 100, 603 - 150, 293 - 100, 643 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); TCHAR tab[] = _T("Tab"); outtextxy(230 - 100, 610 - 150, tab); rectangle(220 - 100, 650 - 150, 300 - 100, 690 - 150); //CapsLock (220,600),(300,640) line(220 - 100, 650 - 150, 220 - 3 - 100, 653 - 150); line(220 - 3 - 100, 653 - 150, 220 - 3 - 100, 693 - 150); line(220 - 100, 690 - 150, 220 - 3 - 100, 693 - 150); line(300 - 100, 690 - 150, 303 - 100, 693 - 150); line(220 - 3 - 100, 693 - 150, 303 - 100, 693 - 150); line(300 - 100, 650 - 150, 303 - 100, 653 - 150); line(303 - 100, 653 - 150, 303 - 100, 693 - 150); settextstyle(17, 0, ch); TCHAR CapsLock[] = _T("CapsLock"); outtextxy(230 - 100, 660 - 150, CapsLock); rectangle(870 - 100, 550 - 150, 940 - 100, 590 - 150); //Backspace (870,500),(940,540) line(870 - 100, 550 - 150, 870 - 3 - 100, 553 - 150); line(870 - 3 - 100, 553 - 150, 870 - 3 - 100, 593 - 150); line(870 - 100, 590 - 150, 870 - 3 - 100, 593 - 150); line(940 - 100, 590 - 150, 943 - 100, 593 - 150); line(870 - 3 - 100, 593 - 150, 943 - 100, 593 - 150); line(940 - 100, 550 - 150, 943 - 100, 553 - 150); line(943 - 100, 553 - 150, 943 - 100, 593 - 150); settextstyle(16, 0, ch); TCHAR Backspace[] = _T("Backspace"); outtextxy(875 - 100, 560 - 150, Backspace); rectangle(220 - 100, 700 - 150, 330 - 100, 740 - 150); //Shift (220,650),(330,690) line(220 - 100, 700 - 150, 220 - 100 - 3, 703 - 150); line(220 - 3 - 100, 703 - 150, 220 - 3 - 100, 743 - 150); line(220 - 100, 740 - 150, 220 - 3 - 100, 743 - 150); line(330 - 100, 740 - 150, 333 - 100, 743 - 150); line(220 - 3 - 100, 743 - 150, 333 - 100, 743 - 150); line(330 - 100, 700 - 150, 333 - 100, 703 - 150); line(333 - 100, 703 - 150, 333 - 100, 743 - 150); settextstyle(20, 0, ch); TCHAR Shift[] = _T("Shift"); outtextxy(230 - 100, 710 - 150, Shift); for (i = 220 - 100; i < 860 - 100; i = i + 50) // 键盘第零行13个键 { rectangle(i, 550 - 150, i + 40, 590 - 150); //键盘第一个字母坐标(220,500),(260,540) line(i, 550 - 150, i - 3, 553 - 150); line(i - 3, 553 - 150, i - 3, 593 - 150); line(i, 590 - 150, i - 3, 593 - 150); line(i + 40, 590 - 150, i + 43, 593 - 150); line(i - 3, 593 - 150, i + 43, 593 - 150); line(i + 40, 550 - 150, i + 43, 553 - 150); line(i + 43, 553 - 150, i + 43, 593 - 150); settextstyle(10, 0, ch); k = (i - 220 + 100) / 50; outtextxy(i + 5, 555 - 150, four[k]); settextstyle(16, 0, ch); outtextxy(i + 20, 570 - 150, five[k]); } for (i = 300 - 100; i < 800 - 100; i = i + 50) // 键盘第一行10个键 { rectangle(i, 600 - 150, i + 40, 640 - 150); //键盘第一个字母坐标(300,550),(340,590) line(i, 600 - 150, i - 3, 603 - 150); line(i - 3, 603 - 150, i - 3, 643 - 150); line(i, 640 - 150, i - 3, 643 - 150); line(i + 40, 640 - 150, i + 43, 643 - 150); line(i - 3, 643 - 150, i + 43, 643 - 150); line(i + 40, 600 - 150, i + 43, 603 - 150); line(i + 43, 603 - 150, i + 43, 643 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (i - 300 + 100) / 50; outtextxy(i + 10, 610 - 150, one[k]); } for (i = 800 - 100; i < 940 - 100; i = i + 50) { rectangle(i, 600 - 150, i + 40, 640 - 150); //键盘第一个字母坐标(800,550),(850,590) line(i, 600 - 150, i - 3, 603 - 150); line(i - 3, 603 - 150, i - 3, 643 - 150); line(i, 640 - 150, i - 3, 643 - 150); line(i + 40, 640 - 150, i + 43, 643 - 150); line(i - 3, 643 - 150, i + 43, 643 - 150); line(i + 40, 600 - 150, i + 43, 603 - 150); line(i + 43, 603 - 150, i + 43, 643 - 150); settextstyle(15, 0, ch); k = (i - 800 + 100) / 50; outtextxy(i + 5, 605 - 150, oneend[k]); outtextxy(i + 20, 620 - 150, oneend1[k]); } for (j = 310 - 100; j < 760 - 100; j = j + 50) { rectangle(j, 650 - 150, j + 40, 690 - 150); //键盘第一个字母坐标(310,600),(350,640) line(j, 650 - 150, j - 3, 653 - 150); line(j - 3, 653 - 150, j - 3, 693 - 150); line(j, 690 - 150, j - 3, 693 - 150); line(j + 40, 690 - 150, j + 43, 693 - 150); line(j - 3, 693 - 150, j + 43, 693 - 150); line(j + 40, 650 - 150, j + 43, 653 - 150); line(j + 43, 653 - 150, j + 43, 693 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (j - 310 + 100) / 50; outtextxy(j + 10, 660 - 150, two[k]); } for (j = 760 - 100; j < 850 - 100; j = j + 50) { // 310,600 350,640 rectangle(j, 650 - 150, j + 40, 690 - 150); //键盘第一个字母坐标(760,600),(800,640) line(j, 650 - 150, j - 3, 653 - 150); line(j - 3, 653 - 150, j - 3, 693 - 150); line(j, 690 - 150, j - 3, 693 - 150); line(j + 40, 690 - 150, j + 43, 693 - 150); line(j - 3, 693 - 150, j + 43, 693 - 150); line(j + 40, 650 - 150, j + 43, 653 - 150); line(j + 43, 653 - 150, j + 43, 693 - 150); settextstyle(20, 0, ch); k = (j - 760 + 100) / 50; outtextxy(j + 7, 655 - 150, three1[k]); outtextxy(j + 20, 669 - 150, three2[k]); } rectangle(860 - 100, 650 - 150, 940 - 100, 690 - 150); //Enter(860,600),(940,640) line(860 - 100, 650 - 150, 860 - 3 - 100, 653 - 150); line(860 - 3 - 100, 653 - 150, 860 - 3 - 100, 693 - 150); line(860 - 100, 690 - 150, 860 - 3 - 100, 693 - 150); line(940 - 100, 690 - 150, 943 - 100, 693 - 150); line(860 - 3 - 100, 693 - 150, 943 - 100, 693 - 150); line(940 - 100, 650 - 150, 943 - 100, 653 - 150); line(943 - 100, 653 - 150, 943 - 100, 693 - 150); settextstyle(20, 0, ch); TCHAR Enter[] = _T("Enter"); settextstyle(20, 0, ch); outtextxy(870 - 100, 660 - 150, Enter); for (m = 340 - 100; m < 690 - 100; m = m + 50) { rectangle(m, 700 - 150, m + 40, 740 - 150); //键盘第一个字母坐标(340,650),(380,690) line(m, 700 - 150, m - 3, 703 - 150); line(m - 3, 703 - 150, m - 3, 743 - 150); line(m, 740 - 150, m - 3, 743 - 150); line(m + 40, 740 - 150, m + 43, 743 - 150); line(m - 3, 743 - 150, m + 43, 743 - 150); line(m + 40, 700 - 150, m + 43, 703 - 150); line(m + 43, 703 - 150, m + 43, 743 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (m - 310 + 100) / 50; outtextxy(m + 10, 710 - 150, three[k]); } for (m = 690 - 100; m < 830 - 100; m = m + 50) { rectangle(m, 700 - 150, m + 40, 740 - 150); //(690,650),(830,690) line(m, 700 - 150, m - 3, 703 - 150); line(m - 3, 703 - 150, m - 3, 743 - 150); line(m, 740 - 150, m - 3, 743 - 150); line(m + 40, 740 - 150, m + 43, 743 - 150); line(m - 3, 743 - 150, m + 43, 743 - 150); line(m + 40, 700 - 150, m + 43, 703 - 150); line(m + 43, 703 - 150, m + 43, 743 - 150); settextstyle(20, 0, ch); k = (m - 690 + 100) / 50; outtextxy(m + 5, 706 - 150, h1[k]); outtextxy(m + 23, 717 - 150, h2[k]); } rectangle(840 - 100, 700 - 150, 940 - 100, 740 - 150); // Shift(840,650),(940,690) line(840 - 100, 700 - 150, 840 - 3 - 100, 703 - 150); line(840 - 3 - 100, 703 - 150, 840 - 3 - 100, 743 - 150); line(840 - 100, 740 - 150, 840 - 3 - 100, 743 - 150); line(940 - 100, 740 - 150, 943 - 100, 743 - 150); line(840 - 3 - 100, 743 - 150, 943 - 100, 743 - 150); line(940 - 100, 700 - 150, 943 - 100, 703 - 150); line(943 - 100, 703 - 150, 943 - 100, 743 - 150); settextstyle(20, 0, ch); outtextxy(850 - 100, 710 - 150, Shift); rectangle(420 - 100, 700 - 100, 690 - 100, 740 - 100);//空格键 line(420 - 100, 700 - 100, 420 - 3 - 100, 700 + 3 - 100); line(420 - 3 - 100, 700 + 3 - 100, 420 - 3 - 100, 740 + 3 - 100); line(420 - 3 - 100, 740 + 3 - 100, 420 - 100, 740 - 100); line(420 - 3 - 100, 740 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100); line(690 + 3 - 100, 740 + 3 - 100, 690 - 100, 740 - 100); line(690 - 100, 700 - 100, 690 + 3 - 100, 700 + 3 - 100); line(690 + 3 - 100, 700 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100); for (m = 220 - 100; m < 420 - 100; m = m + 50)//空格键左边 { rectangle(m, 700 - 100, m + 40, 740 - 100);//ctrl line(m, 700 - 100, m - 3, 700 + 3 - 100); line(m - 3, 700 + 3 - 100, m - 3, 740 + 3 - 100); line(m - 3, 740 + 3 - 100, m, 740 - 100); line(m - 3, 740 + 3 - 100, m + 40 + 3, 740 + 3 - 100); line(m + 40, 740 - 100, m + 40 + 3, 743 - 100); line(m + 40, 700 - 100, m + 40 + 3, 703 - 100); line(m + 40 + 3, 703 - 100, m + 40 + 3, 743 - 100); } for (n = 700 - 100; n < 950 - 100; n = n + 50) { rectangle(n, 740 - 100, n + 40, 700 - 100);//右箭头键 line(n, 700 - 100, n - 3, 703 - 100); line(n - 3, 703 - 100, n - 3, 743 - 100); line(n - 3, 743 - 100, n + 40 + 3, 743 - 100); line(n - 3, 743 - 100, n, 740 - 100); line(n + 40, 700 - 100, n + 43, 703 - 100); line(n + 43, 703 - 100, n + 43, 743 - 100); line(n + 40, 740 - 100, n + 43, 743 - 100); } settextstyle(17, 0, ch); TCHAR Ctrl[] = _T("Ctrl"); TCHAR Fn[] = _T("Fn"); TCHAR Win[] = _T("Win"); TCHAR Alt[] = _T("Alt"); TCHAR Home[] = _T("Hom"); TCHAR End[] = _T("End"); TCHAR Up[] = _T("Up"); outtextxy(130, 610, Ctrl); outtextxy(180, 610, Fn); outtextxy(230, 610, Win); outtextxy(280, 610, Alt); outtextxy(810, 610, End); outtextxy(760, 610, Up); outtextxy(705, 610, Home); outtextxy(660, 610, Ctrl); outtextxy(610, 610, Alt); setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(30, 30, 240, 80); TCHAR pause[] = _T("退出游戏请按Ese"); settextstyle(25, 0, _T("宋体")); setbkmode(TRANSPARENT); outtextxy(30,45, pause); //暂停判断 } //开始菜单 void beginning() { IMAGE img; //准备图片 loadimage(&img, L"欢迎界面3.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 //cleardevice(); setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(750, 130, 930, 190); fillrectangle(750, 210, 930, 270); TCHAR ch[] = _T("SNAP____"); settextstyle(40, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR begin[] = _T("开始游戏"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(750 + 10, 130 + 10, begin); outtextxy(750 + 10, 210 + 10, go); } //开始菜单鼠标交互 void mouse() { initgraph(1000, 650); beginning(); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏 { setlinecolor(RED); rectangle(750, 130, 930, 190); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏 { setlinecolor(RED); rectangle(750, 210, 930, 270); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(750, 130, 930, 190); rectangle(750, 210, 930, 270); } } closegraph(); } //关卡设置 void level1() { mouse();//鼠标交会函数关闭了窗口 initgraph(1000, 650); IMAGE img; //准备图片 loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(255, 192, 203)); fillrectangle(365, 230, 675, 280); fillrectangle(365, 300, 675, 350); fillrectangle(365, 370, 675, 420); TCHAR ch[] = _T("SNAP____"); settextstyle(30, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR first[] = _T("模式一:轻轻松松"); TCHAR second[] = _T("模式二:小菜一碟"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(415 - 50 + 30, 230 + 10, first); outtextxy(415 - 50 + 30, 300 + 10, second); outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//开始游戏 { setlinecolor(RED); rectangle(365, 230, 675, 280); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//退出游戏 { setlinecolor(RED); rectangle(365, 300, 675, 350); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏 { setlinecolor(RED); rectangle(365, 370, 675, 420); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(365, 230, 675, 280); rectangle(365, 300, 675, 350); rectangle(365, 370, 675, 420); } } closegraph(); } //第一关游戏界面 void gamefirst() { char s[10] = { 0 }; char f[10] = { 0 }; int score = 0; int wrong = 0; //level();//也关闭了屏幕 initgraph(1000, 650); keyboard(); loadResource(); //outtextimage(200, 200, 'S'); for (int i = 0; i < 5; i++) { initArraychar(array, i); } initgraph(1000, 650);//要去掉吗? while (1)//文字下降 { BeginBatchDraw(); keyboard(); for (int i = 0; i < 5; i++) { array[i].y += 10; if (array[i].y >= 400) { initArraychar(array, i); score -= 10; wrong++; } } for (int i = 0; i < 5; i++) { outtextimage(array[i].x, array[i].y, array[i].target); } if (_kbhit()) { char userkey = _getch();//接收用户输入 for (int i = 0; i < 5; i++) { if (array[i].target == userkey || array[i].target == userkey - ('a' - 'A')) { score += 10; initArraychar(array, i); break; } } if (userkey == 27) { break; } } Sleep(100); EndBatchDraw(); } //closegraph(); //initgraph(1000, 650); beginning(); Sleep(100); } void highlight(char c)//高亮 { keyboard(); if (_kbhit()) { char c = _getch();//接收用户输入 fillrectangle(x, y, x + 40, y + 40); Sleep(20); clearrectangle(x, y, x + 40, y + 40); } if (c >= 'A' && c <= 'Z') { c = c + 32; if (c >= 'a' && c <= 'z') //若为小写 switch (c) { case 'q': { fillrectangle(200, 450, 200 + 40, 450 + 40); Sleep(20); clearrectangle(200, 450, 200 + 40, 450 + 40); break; } case 'w': { fillrectangle(250, 450, 250 + 40, 450 + 40); Sleep(20); clearrectangle(250, 450, 250 + 40, 450 + 40); break; } case 'e': { fillrectangle(300, 450, 300 + 40, 450 + 40); Sleep(20); clearrectangle(300, 450, 300 + 40, 450 + 40); break; } case 'r': { fillrectangle(350, 450, 350 + 40, 450 + 40); Sleep(20); clearrectangle(350, 450, 350 + 40, 450 + 40); break; }//x = 350; y = 450; break; case 't': { fillrectangle(400, 450, 400 + 40, 450 + 40); Sleep(20); clearrectangle(400, 450, 400 + 40, 450 + 40); break; }//x = 400; y = 450; break; case 'y': { fillrectangle(450, 450, 450 + 40, 450 + 40); Sleep(20); clearrectangle(450, 450, 450 + 40, 450 + 40); break; }//x = 450; y = 450; break; case 'u': { fillrectangle(500, 450, 500 + 40, 450 + 40); Sleep(20); clearrectangle(500, 450, 500 + 40, 450 + 40); break; }//x = 500; y = 450; break; case 'i': { fillrectangle(550, 450, 550 + 40, 450 + 40); Sleep(20); clearrectangle(550, 450, 550 + 40, 450 + 40); break; }//x = 550; y = 450; break; case 'o': { fillrectangle(600, 450, 600 + 40, 450 + 40); Sleep(20); clearrectangle(600, 450, 600 + 40, 450 + 40); break; }//x = 600; y = 450; break; case 'p': { fillrectangle(650, 450, 650 + 40, 450 + 40); Sleep(20); clearrectangle(650, 450, 650 + 40, 450 + 40); break; }//x = 650; y = 450; break; //case '[':x = 700; y = 450; break; //case '{':x = 700; y = 450; break; //case ']':x = 750; y = 450; break; //case '}':x = 750; y = 450; break; //case '|':x = 800; y = 450; break; //case 'Cap':x = 120; y = 500; break; case 'a': { fillrectangle(210, 500, 210 + 40, 500 + 40); Sleep(20); clearrectangle(210, 500, 210 + 40, 500 + 40); break; }//x = 210; y = 500; break; case 's': { fillrectangle(260, 500, 260 + 40, 500 + 40); Sleep(20); clearrectangle(260, 500, 260 + 40, 500 + 40); break; }//x = 260; y = 500; break; case 'd': { fillrectangle(310, 500, 310 + 40, 500 + 40); Sleep(20); clearrectangle(310, 500, 310 + 40, 500 + 40); break; }//x = 310; y = 500; break; case 'f': { fillrectangle(360, 500, 360 + 40, 500 + 40); Sleep(20); clearrectangle(360, 500, 360 + 40, 500 + 40); break; }//x = 360; y = 500; break; case 'g': { fillrectangle(410, 500, 410 + 40, 500 + 40); Sleep(20); clearrectangle(410, 500, 410 + 40, 500 + 40); break; }//x = 410; y = 500; break; case 'h': { fillrectangle(460, 500, 460 + 40, 500 + 40); Sleep(20); clearrectangle(460, 500, 460 + 40, 500 + 40); break; }//x = 460; y = 500; break; case 'j': { fillrectangle(510, 500, 510 + 40, 500 + 40); Sleep(20); clearrectangle(510, 500, 510 + 40, 500 + 40); break; }//x = 510; y = 500; break; case 'k': { fillrectangle(560, 500, 560 + 40, 500 + 40); Sleep(20); clearrectangle(560, 500, 560 + 40, 500 + 40); break; }//x = 560; y = 500; break; case 'l': { fillrectangle(610, 500, 610 + 40, 500 + 40); Sleep(20); clearrectangle(610, 500, 610 + 40, 500 + 40); break; }//x = 610; y = 500; break; case 'z': { fillrectangle(240, 550, 240 + 40, 550 + 40); Sleep(20); clearrectangle(240, 550, 240 + 40, 550 + 40); break; }//x = 240; y = 550; break; case 'x': { fillrectangle(290, 550, 290 + 40, 550 + 40); Sleep(20); clearrectangle(290, 550, 290 + 40, 550 + 40); break; }//x = 290; y = 550; break; case 'c': { fillrectangle(340, 550, 340 + 40, 550 + 40); Sleep(20); clearrectangle(340, 550, 340 + 40, 550 + 40); break; }//x = 340; y = 550; break; case 'v': { fillrectangle(390, 550, 390 + 40, 550 + 40); Sleep(20); clearrectangle(390, 550, 390 + 40, 550 + 40); break; }//x = 390; y = 550; break; case 'b': { fillrectangle(440, 550, 440 + 40, 550 + 40); Sleep(20); clearrectangle(440, 550, 440 + 40, 550 + 40); break; }//x = 440; y = 550; break; case 'n': { fillrectangle(490, 550, 490 + 40, 550 + 40); Sleep(20); clearrectangle(490, 550, 490 + 40, 550 + 40); break; }//x = 490; y = 550; break; case 'm': { fillrectangle(540, 550, 540 + 40, 550 + 40); Sleep(20); clearrectangle(540, 550, 540 + 40, 550 + 40); break; } } } } void InitTarget(TARGET words[], int n)//随机产生三个单词 { settextstyle(20, 0, L"宋体"); TCHAR str[30][30] = { L"main", L"include", L"if", L"switch", L"break", L"char", L"void", L"continue", L"for", L"while", L"do", L"int", L"unsigned", L"struct", L"static", L"malloc", L"free", L"else", L"float", L"double", L"short", L"return", L"getchar", L"gets", L"include", L"realloc", L"pointer", L"default", L"long" }; //随机产生 wcscpy(words[n].str, str[rand() % 29]); //判断重复 while (words[n].str == words[(n + 1) % 3].str || words[n].str == words[(n + 2) % 3].str) { wcscpy(words[n].str, str[rand() % 29]); } words[n].x = rand() % (900); words[n].y = -20; } //设置分数 void drawscore() { settextcolor(RED); settextstyle(30, 0, L"宋体"); outtextxy(800, 50,L"正确数:"); outtextxy_int(900, 50, "%d", right); outtextxy(800, 100, L"失误数:"); outtextxy_int(900, 150, "%d", wrong); outtextxy(800, 150, L"正确率:"); if (right + wrong == 0) { outtextxy_double(900, 250, "%.2lf%%", 0.00); } else { double sum = (right +wrong); outtextxy_double(900, 250, "%.2lf%%", right/sum*100); } } void gamesecond()//第二关天降单词 { initgraph(1000, 650); keyboard(); drawscore(); struct TARGET words[3]; for (int n = 0; n < 3; n++) { InitTarget(words, n); words[n].y = -15 - n * 30; } int i=0; while (1) { //cleardevice(); BeginBatchDraw(); keyboard(); drawscore(); int flagerror = 0; for (int n = 0; n < 3; n++) { words[n].y += 2; if (words[n].y > 400-30)//碰线处理 { InitTarget(words, n); } } for (int n = 0; n < 3; n++)//字母下落 { settextcolor(RED); settextstyle(30, 0, _T("宋体")); outtextxy(words[n].x, words[n].y, LPCTSTR(words[n].str)); words[n].y += 2; } if (_kbhit()) { //字符串变成字符处理 char target;//接受用户按键 if (target = _getch() != '\r') { userkey.str[i++] = target; highlight(target); } else { for (i = 0; i < 3; i++) { if (wcscmp(userkey.str, words[i].str) == 0) { InitTarget(words, i); right++; flagerror = 1; } } if (flagerror == 0) { wrong++; } i = 0;//易错,要重新初始化 userkey.x = 100; memset(userkey.str, 0, 20);//防止覆盖 } } outtextxy(userkey.x, userkey.y, userkey.str); Sleep(50); EndBatchDraw(); } } void level() { mouse();//鼠标交会函数关闭了窗口 initgraph(1000, 650); IMAGE img; //准备图片 loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(255, 192, 203)); fillrectangle(365, 230, 675, 280); fillrectangle(365, 300, 675, 350); fillrectangle(365, 370, 675, 420); TCHAR ch[] = _T("SNAP____"); settextstyle(30, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR first[] = _T("模式一:轻轻松松"); TCHAR second[] = _T("模式二:小菜一碟"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(415 - 50 + 30, 230 + 10, first); outtextxy(415 - 50 + 30, 300 + 10, second); outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//模式一 { setlinecolor(RED); rectangle(365, 230, 675, 280); if (m.uMsg == WM_LBUTTONDOWN) { gamefirst(); } } else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//模式二 { setlinecolor(RED); rectangle(365, 300, 675, 350); if (m.uMsg == WM_LBUTTONDOWN) { //break; gamesecond(); } } else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏 { setlinecolor(RED); rectangle(365, 370, 675, 420); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(365, 230, 675, 280); rectangle(365, 300, 675, 350); rectangle(365, 370, 675, 420); } } closegraph(); } //退出界面 void goodbye(time_t end, time_t start, int flag) { time_t timep; int i = end - start; char a[10] = { '\0' }; TCHAR s[100] = { 0 }; char ff[10] = { 0 }; TCHAR fff[100] = { 0 }; cleardevice(); setcolor(RED); IMAGE img; loadimage(&img, L"结束.jpg", 1000, 650); putimage(0, 0, &img); TCHAR style[] = _T("黑体"); settextstyle(40, 0, style); TCHAR ch[] = _T("游戏时间:"); outtextxy(104, 180, ch); TCHAR chf[] = _T("失败次数:"); outtextxy(654, 180, chf); sprintf_s(a, "%d", i); sprintf_s(ff, "%d", flag); #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, a, -1, s, 100); #else strcpy(a, s); #endif #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, ff, -1, fff, 100); #else strcpy(ff, fff); #endif outtextxy(200, 220, s); outtextxy(950, 220, fff); _getch(); } int main() { srand((unsigned)time(NULL)); initgraph(1000, 650);//新建窗口 setbkcolor(COLORREF RGB(255, 192, 203)); //cleardevice(); beginning(); level(); //gamefirst(); //keyboard(); //gamesecond(); drawscore(); _getch(); // 按任意键继续,千万不要删!!!!!!! closegraph(); // 关闭绘图窗口 return 0; } ``` ``` ``` ```
(SQL SERVER存储过程)将查询的数据放到另外一张表的字段里,仅此而已
``` ALTER PROCEDURE [dbo].[bb_sx_sclr] @KSRQ varchar(20), --开始时间 @JSRQ varchar(20) --结束时间 AS BEGIN DECLARE @DATE_S DATETIME,@DATE_E DATETIME --定义时间格式的日期变量 DECLARE @DATE_TMP DATETIME --交换日期用的临时变量 BEGIN TRY --开始校验输入是否合法 SET @DATE_S =CONVERT(DATETIME,@KSRQ) --转换输入的字符串日期到时间格式的变量 SET @DATE_E =CONVERT(DATETIME,@JSRQ) --转换输入的字符串日期到时间格式的变量 IF @DATE_S>@DATE_E --如果开始日期大于结束日期,则交换,允许用户输入日期大小相反 BEGIN SET @DATE_TMP=@DATE_S SET @DATE_S=@DATE_E SET @DATE_E=@DATE_TMP END END TRY BEGIN CATCH --错误处理,校验不通过则输出'0000-00' SELECT '0000-00' LIST RETURN END CATCH DECLARE @CHAR_MONTH VARCHAR(3) --定义月份的字符串临时变量 drop table t_sclr create table t_sclr( 月份 varchar(7), 装配总数 varchar(20) ) --比较条件:当前年份*12<=目标年和月份则继续 WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E)) Begin SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S)) --转换当前月份的数据类型到字符串 SET @CHAR_MONTH='0'+@CHAR_MONTH --在月份前加“0” SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2) --截取最后两位确保月份为1和2的时候其显示为01和02 INSERT INTO t_sclr(月份) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH) SET @DATE_S=DATEADD(MM,1,@DATE_S) --当前月份+1 END SELECT 月份 FROM t_sclr ORDER BY 月份 ASC --按照先后顺序返回需要的结果列表 --2.装配总数 insert into t_sclr(装配总数,月份) select cast(YEAR(a.EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(a.EXTEND50) as nvarchar(2)) as 时间, SUM(isnull(b.OUT_NUM,0)) as 发货数量 from t_contract_order a left join T_CONTRACT_ORDER_DETAIL b on a.sub_account_id=b.sub_account_id where a.EXTEND50>=@KSRQ and a.EXTEND50<=@JSRQ and a.EXTEND1='博莱特工程' group by cast(YEAR(a.EXTEND50) as varchar(4)) + '-' + cast(MONTH(a.EXTEND50) END ``` 这是我的执行结果 消息 156,级别 15,状态 1,过程 bb_sx_sclr,第 53 行 关键字 'END' 附近有语法错误。
根据条码编号查询的一种商品的名称,怎么用C语言的程序编写设计的思想原则来实现的代码编写
Problem Description 沃尔玛公司由美国零售业的传奇人物山姆&#8226;沃尔顿先生于1962年在阿肯色州成立。经过四十多年的发展,沃尔玛公司已经成为美国最大的私人雇主和世界上最大 的连锁最大零售企业目前,沃尔玛在全球开设了7500家商场,员工总数210万人,分布在全球14个国家。每周光临沃尔玛的顾客1.75亿人次。 当然,每天卖出去的东西也是挺多的。那么就需要一个强大的商品检索系统了,能够快速的找到想找的商品,并且能够准确的给出此件商品的数目。假若,山姆先生找到了身为程序员的你,让你帮忙写个程序来完成这个--------人很难完成的任务。任务书如下: 任务名称 商品检索系统 任务提交方式 程序源码 任务输入 商品条形码 | 输入误差 5% 任务输出 对应商品数目 | 输出允许误差 0% Input 输入包括若干组测试数据,每组测试数据第一行两个正整数N,M。N代表所有商品的总件数,M代表要查询的商品件数。接下来N行,每行一个字符串S[ i ],代表第i个商品的名称。之后是M组条形码,每组条形码第一行一个数字n,代表条形码的条数,接下来n行,每行一条条形码,代表了一个字符,每组条形码代表了要查询的一种商品的名称。正确的商品名称中仅包含大写字母,小写字母以及数字。 Output 每组测试数据中,对于每个输入的条形码,输出一行数字,代表以查询的商品名称为前缀的商品的总件数,如果输入的条形码是错误的,则输出“wrong barcode!” 数据范围说明: N [1 , 10^5] 整数 M[1 , 10^6] 整数 Length(S[i]) [1 , 30] 整数 条形码条数[10 , 10^5] 实数 条形码输入说明: 输入的条形码,由两部分组成,第一部分是一个数字n,代表每组条形码的条数,接下来n行,每行由宽度不等的多个黑条和白条组成,黑条和白条的宽度与其标准值的误差不会超过5%,黑条代表1,白条代表0,白条标准条的宽度是黑条标准条宽度的一半。每8个黑白条占一行组成一个2进制的ASCII码,表示其所对应的字符。描述一个商品名称的正确条形码总是从“begin”开始,然后以“end”结束。 Sample Input 4 1 Onepiece Chair Plant Pen 16 10 20 20 10 10 10 20 10 10 20 20 10 10 20 10 20 10 20 20 10 10 20 20 20 10 20 20 10 20 10 10 20 10 20 20 10 20 20 20 10 10 20 10 10 20 20 20 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 20 10 20 20 20 10 10 10 10 10 20 20 10 20 10 10 20 10 20 20 10 10 20 10 20 10 20 20 10 10 10 20 20 10 20 20 10 10 20 10 20 10 20 20 10 10 20 10 20 10 20 20 10 20 20 20 10 10 20 20 10 10 20 10 10 Sample Output 1
HDU Today
Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。 这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。 徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗? 请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。 Input 输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000); 第二行有徐总的所在地start,他的目的地end; 接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。 note:一组数据中地名数不会超过150个。 如果N==-1,表示输入结束。 Output 如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。 Sample Input 6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1 Sample Output 50
急急急急急急汇编报错求大神帮忙改错
include io32.inc .data m1 byte ' 代码转换系统 ',13,10,0 ;菜单 m2 byte '----------------------------------------------',13,10,0 ;分割线 m3 byte ' 编号 操作 ',13,10,0 ma byte ' a 实现大写字母向小写字母的转换',13,10,0 mb byte ' b 实现小写字母向大写字母的转换',13,10,0 mc byte ' c 实现二进制向十六进制数的转换',13,10,0 md byte ' d 实现十六进制向二进制数的转换',13,10,0 me byte ' e 实现十六进制向十进制数的转换',13,10,0 mq byte ' q 退出',13,10,0 m_err byte ' 输入错误,请重新输入',13,10,0 m_meau byte '请输入菜单中的编号: ',0 m_inputs byte '请输入一个小写字母: ',0 m_inputl byte '请输入一个大写字母: ',0 m_outputl byte '对应的小写字母: ',0 m_outputs byte '对应的大写字母: ',0 m_input1 byte '请输入二进制位数: ',0 m_input11 byte '请输入二进制数: ',0 m_output1 byte '转换后的十六进制数: ',0 m_output2 byte '转换后的二进制数: ',0 m_input3 byte '请输入一个十六进制数: ',0 m_output3 byte '转换后的十进制数: ',0 array byte 8 dup (0) ;用字符串数组保存十六进制数 sum dword ? ;十进制数变量 len byte ? ;字符串数组的长度 m byte ? array1 byte 100 dup (0) ;定义一个数组用来保存初始二进制数 array2 byte 100 dup (0) ;用来保存转换后的十六进制数 n dword ? k dword ? j dword ? .code start: mov eax,offset m1 ;显示菜单中的内容 call dispmsg mov eax,offset m2 call dispmsg mov eax,offset m3 call dispmsg mov eax,offset ma call dispmsg mov eax,offset mb call dispmsg mov eax,offset mc call dispmsg mov eax,offset md call dispmsg mov eax,offset me call dispmsg mov eax,offset mq call dispmsg meau: mov eax,offset m_meau call dispmsg ;提示输入相应的菜单编号 call readc ;输入对应的编号 call dispcrlf ;换行 cmp al,'a' ;判断输入 jz a ;若输入‘a’,则跳转到标识符‘a’ cmp al,'b' jz b ;若输入‘b’,则跳转到标识符‘b’ cmp al,'c' jz cc ;若输入‘c’,则跳转到标识符‘cc’ cmp al,'d' jz e ;若输入‘d’,则跳转到标识符‘e’ cmp al,'e' jz e ;若输入‘e’,则跳转到标识符‘e’ cmp al,'q' jz q ;若输入‘q’,则跳转到标识符‘q’ mov eax,offset m_err call dispmsg ;输入错误,提示错误的信息 jmp meau ;大写字母向小写字母的转换 returna: mov eax,offset m_err call dispmsg a: mov eax,offset m_inputl call dispmsg ;提示输入一个大写的字母 call readc ;获得字母 mov bl,al ;将输入的内容存储到bl中 call dispcrlf ;换行 cmp al,'A' ;判断输入的字母是否合法 jb returna ;如果比'A'小,则跳转到returna标识符 cmp al,'Z' ja returna ;如果比'Z'大,则跳转到returna标识符 call dispc ;显示字母 mov eax,offset m_outputl call dispmsg ;输入正确,则提示输出相应的小写字母 add bl,20h ;实现大写向小写的转换 mov al,bl call dispc ;显示转换后的字母 call dispcrlf ;换行 jmp meau ;小写字母向大写字母的转换 returnb: mov eax,offset m_err call dispmsg b: mov eax,offset m_inputs call dispmsg ;提示输入一个小写字母 call readc ;获得字母 mov bl,al ;将输入的内容存储到bl中 call dispcrlf cmp al,'a' ;判断输入合法性 jb returnb ;如果比‘a’小,则跳转到returnb标识符 cmp al,'z' ja returnb ;如果比‘z’大,则跳转到returnb标识符 call dispc ;显示字母 mov eax,offset m_outputs call dispmsg ;提示输出相应的大写字母 sub bl,20h ;实现小写到大写字母的转换 mov al,bl call dispc ;将转换的字母输出 call dispcrlf ;换行 jmp meau ;二进制向十六进制转换 cc: mov eax,offset m_input1 call dispmsg call readuid ;输入二进制数的位数 mov j,eax ;保存二进制位数 mov eax,offset m_input11 ;提示输入二进制数 call dispmsg call dispcrlf mov ecx,0 ;清零,计数器 c1: call readuid mov array1[ecx],al ;一位一位的输入 inc ecx cmp ecx,j jb c1 ;低于位数,继续输入 mov ecx,j dec ecx mov eax,1 xor ebx,ebx ;记录移动的位数 xor edx,edx ;表示四个二进制位的和 xor esi,esi ;保存十六进制当前的位置 c2: mov n,0 ;n作为二进制位数是否已达4位的一个标志 mov k,0 ;k作为数值是否已经结束的一个标志 cmp array1[ecx],1 jnz c11 ;判断二进制数的某一位是否为1 mov eax,1 cmp ebx,1 jnz c3 ;判断数据所在的位数,不相等,转向c3 shl eax,1 ;逻辑左移 jmp c5 c3: cmp ebx,2 jnz c4 ;根据比较来确定移动的位数 shl eax,2 ;逻辑左移 jmp c5 c4: cmp ebx,3 jnz c5 ;根据比较来判断移动的位数 shl eax,3 ;逻辑左移 c5: add edx,eax ;保存和 c11: cmp ebx,3 ;判断二进制数是否已经有四位 jnz c12 mov n,1 c12: cmp ecx,0 ;判断数值是否已经全部计算完毕 jnz c13 mov k,1 c13: mov edi,n or edi,k ;保存n或者k的值 cmp edi,1 jnz c16 cmp edx,9 jna c14 sub edx,10 ;edx大于9 add edx,'A' ;转换成相应的字母 mov array2[esi],dl ;将十六进制数保存至数组 jmp c15 c14: add edx,'0' mov array2[esi],dl ;edx大于等于0小于等于9 c15: inc esi ;改变当前十六进制数所在位置 xor edx,edx ;清零以便下一次运用 mov ebx,-1 c16: inc ebx dec ecx cmp ecx,0 jnl c2 ;小于0,退出循环 mov eax,offset m_output1 call dispmsg mov ecx,esi ;16进制数的位数 dec ecx ccc: mov al,array2[ecx] call dispc ;输出每一个十六进制数 dec ecx cmp ecx,0 ;输出转换后的数据 jnl ccc call dispcrlf jmp meau ;返回主菜单 ;十六进制向二进制的转换 d: mov eax,20 push eax ;将20作为一个判断标识 mov eax,sum ;将十进制数存入eax中 jmp d1 d1: mov edx,0 mov ebx,2 ;除数2 div ebx mov ecx,eax ;保存商 mov eax,edx push eax ;将余数压入栈 mov eax,ecx cmp eax,0 ;判断商是否为0 jz d2 jmp d1 d2: mov ecx,eax ;暂存 mov eax,offset m_output2 call dispmsg mov eax,ecx jmp d3 d3: pop eax ;出栈 cmp eax,20 jz d4 ;判断是否出栈完毕 call dispsid jmp d3 d4: call dispcrlf jmp meau ;返回主菜单 ;十六进制向十进制的转换 e: mov m,al mov eax,offset m_input3 call dispmsg mov eax,offset array call readmsg mov len,al ;获得字符串长度 xor ecx,ecx ;异或清零 mov cl,len ;计数 dec cl ;自减1 xor eax,eax mov edx,1 ;初始权值 again: cmp array[ecx],'A' jl shiliu_shi1 ;小于A,转向shiliu_shi1 cmp array[ecx],'F' jg shiliu_shi1 ;大于Z,转向shiliu_shi1 xor ebx,ebx mov bl,array[ecx] ;相对寻址 sub bl,55 ;转换成相应的数字 imul ebx,edx add eax,ebx imul edx,16 ;改变权值 jmp shiliu_shi3 shiliu_shi1: cmp array[ecx],'0' jl shiliu_shi2 ;小于‘0’,转向shiliu_shi2 cmp array[ecx],'9' jg shiliu_shi2 ;大于‘9’,转向shiliu_shi2 xor ebx,ebx ;临时寄存 mov bl,array[ecx] sub bl,'0' ;转换成相应的数字 imul ebx,edx add eax,ebx imul edx,16 ;改变权值 jmp shiliu_shi3 shiliu_shi2: mov eax,offset m_err call dispmsg ;提示输入错误 jmp e shiliu_shi3: dec ecx ;自减 cmp ecx,0 jnl again ;不小于0,转向again mov sum,eax cmp m,'d' ;判断选择的功能 jz d ;为d,继续进行转换成二进制 cmp m,'e' jz ee ;为e,直接输出 ee: mov eax,offset m_output3 call dispmsg mov eax,sum ;数据输出 call dispuid call dispcrlf jmp meau ;返回主菜单 q: jmp done ;退出 done: exit 0 end start
python3.7 要从串口读数据保存到文件,运行后发现如发送的数据中文字比较多就会出现乱码或丢数据。
问题描述如标题,如果发送的是全英文的时候或少数中文字的时候,对比发送和保存文件内容一致,没有丢数据。我(用了14万行文件发送,收到的数据对比都正确) 个人认为:GB2312编码中文字是2个字节表示,串口在读数据的时候可能只读到此中文字的第一个字节,第二个字节在下一轮读取。 代码如下,请大牛们帮忙看看,感谢! ``` #!/usr/bin/python # -*-coding: utf-8 -*- import serial import threading import time from datetime import datetime #串口相关功能 class SerialPort: #初始化 def __init__(self, port, buand,time_out): self.port = serial.Serial(port, buand,timeout=time_out) self.port.close() if not self.port.isOpen(): self.port.open() #打开串口 def port_open(self): if not self.port.isOpen(): self.port.open() #关闭串口 def port_close(self): self.port.close() #读串口数据 def read_data(self): global is_exit global data_bytes while not is_exit: count = self.port.inWaiting() if count > 0: rec_str = self.port.read(count) data_bytes = rec_str.decode('GB2312', 'ignore') file_w.write_file() #文件相关功能 class SerialFile: #初始化 def __init__(self, name): self.name = name self.file ='' #打开文件 def open_file(self): self.f = open(self.name,'w') #print('====打开文件',end='') #print(self.f,end='') #print('====') #self.f.write('打开就写内容,是否能保存到文件中??') #串口读到的数据一个字符一个字符的存到文件中 def write_file(self): global data_bytes mutex.acquire() #print('====写锁定开始====') #print('data_bytes is :') #print(data_bytes) data_len=len(data_bytes) #print('====数据长度',end='') #print(data_len,end='') #print('====') if data_len>0: for data in data_bytes: if data == '\n': self.f.write('') #self.f.write('[%s] '%time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())) else: self.f.write(data) self.f.flush()#刷新buffer数据保存到文件中 data_bytes = '' mutex.release() #print('====写锁定结束====') def close_file(self): self.file.close print('文件关闭') if __name__ == '__main__': serialPort = 'COM4' # 串口 baudRate = 115200 # 波特率 time_out = 2 is_exit=False data_bytes='' #打开串口 mSerial = SerialPort(serialPort, baudRate,time_out) #输入待保存的文件名称 filename=input('请输入保存的文件名:') dt=datetime.now() nowtime_str=dt.strftime('%y-%m-%d %H-%M-%S') #当前时间 filename=nowtime_str+'_'+filename file_w = SerialFile(filename) file_w.open_file() #开始数据读取线程 t1 = threading.Thread(target=mSerial.read_data) t1.setDaemon(True) mutex = threading.Lock() t1.start() ```
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问