scanf字符串的问题求解

编程实现用scanf读取一个字符串,然后打印出来。
char department[256];
scanf("%s",department);
printf("%s\n",department);
这个方法就能实现,而使用下面的指针方法就会出现报错(段错误 (核心已转储)
)。
char *department=Null;
scanf("%s",department);
printf("%s\n",department);
想问问为什么。
我的理解是前一种方法是事先申请了256的空间,而后者没有申请空间会导致溢出。
那么如果我不确定输入字符串长度的时候,该怎么处理呢?

2个回答

给字符串指针赋值 你要事先给指针分配空间才行。指针只是个地址,你要往指针所指的地址里存放内容,就必须先给指针分配空间
如果是VS的话可以试试用scanf_s

cw290616609
CarpeDiemWP 谢谢!我用的是GCC,最后用malloc分配一段空间给指针就实现了。
大约 4 年之前 回复

char *department = new char[1000];你那么写,department只有地址空间,也就是四字节的指针空间,没有存储数据的空间

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
各位大佬,小白求解一道关于字符串转换为整数的题求解,谢谢。
输入一个字符串保存到数组str中,将str中的数字字符存储到数组tOrigin中,并将其转换为整数输出,用k记录字符串中数字字符的个数。例如:用户输入字符串1243abc3,则将12433取出以整数形式输出。阅读程序,找出其中的错误,并改正之。 #include <math.h> #include <stdio.h> void fun(char *s, char *t, int k) { int i; k = 0; for (i = 0; s[i]; i++) if (0 <= s[i] && s[I] <= 9) { t[*k] = s[i]; *k += 1; } } void main() { char str[100], tOrigin[9]; long int n; int i, k; printf("Please enter string s:"); scanf("%s", str); fun(str, tOrigin, &k); for (i = 0; i < k; i++) n += (tOrigin [k - 1 - i] - '0') * pow(10, i); printf("The result is: %d", n); }
c语言字符串问题,关于strlen与sizeof
先看一下源代码 ``` #include <stdio.h> #include <string.h> #define PRAISE "What a super marvelous name!" int main(void) { char name [40]; printf("What is your name ?\n"); scanf("%s",name); printf("Hello %s. %s\n",name,PRAISE ); printf("Your name of %d letters occupies %d memory cells.\n", strlen(name),sizeof(name)); printf("The phrase of praise has %d letters ",strlen (PRAISE)); printf("and occupies %d memory cells.\n",sizeof PRAISE); return 0; } ``` 下面是运行情况 ![图片说明](https://img-ask.csdn.net/upload/201906/13/1560392321_198013.png) 问题是为什么输入的字符超过了 name的数组长度,而strlen函数给出的是正确的字符数,而sizeof给的是数组原长度,而且超过数组的部分怎么还能被是strlen正确计数?大神求解。
c算法问题 求解 第一组数据问题
#include<stdio.h> #include<string.h> int main() { int a,b1,c1,sum,tmp,v; char b[999]; char c[999]; char y; scanf("%d",&a); for (int i=0;i<a;i++) { scanf("%s",b); scanf("%s",c);//输入 printf("%s\n",b); printf("%s\n",c);//用于临时测试 b1=strlen(b); c1=strlen(c);//字符串长度 for(int z=0,k=0;k<b1;k++){ if(c[0]==b[k]){//从第二个字符串的第一位开始 tmp=k;//定义临时值 do{ if(c[z]==b[tmp]) { z++; tmp++; } else{ break; } v++; }while(v==c1-1);//检测相等的长度 if(z==c1-1){//如果长度等于第二个字符串的长度 则加一 sum++; } } else continue; } printf("%d\n",sum); } } //问题:输入的第一组数据总是得出0 第二组包括以后正常 /*输入 3 abababa aba abcabc abc aaaaa aaa 输出 abababa aba 0 abcabc abc 2 aaaaa aaa 3 */
有关缓冲区问题,求解
printf("请输入姓名:"); scanf("%s", &customerinf[i].name); printf("请输入身份证号:"); scanf("%d", &customerinf[i].num); printf("请输入性别:"); scanf("%s", &customerinf[i].sex); printf("请输入联系方式:"); scanf("%d", &customerinf[i].phone); 这一段代码有没有回车影响字符串读数的问题啊,我用这串代码往文本文件里写东西,只有名字在文本文件里,另外三部分没有,是缓冲区的问题还是别的问题,我存数据的时候用的是fwrite,也就是二进制
求解!跪求大神指教!
1003. 我要通过!(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符; 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; 3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。 现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。 输入格式: 每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。 输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。 输入样例: 8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA 输出样例: YES YES YES YES NO NO NO NO 我的程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { printf("请输入测试数据个数:");//这部分是我加上的便于用户执行 int n,m; int a,b,c; scanf("%d",&n); char receive[n][100]; getchar(); for(m=0;m<n;m++) { gets(receive[m]); }//接收数组 for(m=0;m<n;m++) { for(a=0;receive[m][a]=='A';a++) { }//将开始的A字母读完; b=a; if(receive[m][b]=='P')//A读完之后下一个字母必须为P; { for(a=1;receive[m][b+a]=='A';a++) { }//将P中间的A字母读完; c=a+b; if(receive[m][c]=='T'&&a>=2)//保证中间至少有一个A { for(a=1;receive[m][c+a]=='A';a++) { } if(receive[m][a+c+1]=='\0')//编译的时候好像从这就直接跳到NO了 {//我用的是第三个样例试的; printf("YES\n"); } else { printf("NO\n"); } } else { printf("NO\n"); } } else { printf("NO\n"); } } return 0; } 求大神指点!谢谢啦!
C语言求解,简单问题求解
在C语言里,定义整型变量a可以使用语句: int a; 而定义一重指针变量p1指向a变量,即把a变量的地址储存在指针变量p1里,可以使用语句: int *p1; p1 = &a; 若要通过p1访问变量a,应该使用: *p1 定义二重变量p2指向p1指针,即把p1的地址存储在p2里,可以使用: int *p2; p2 = &p1; 由于p1之前已经指向a,因此通过p2可以访问到a变量,使用: **p2 以此类推...... 现在给出一个x重指针变量的定义,并假设之前已经定义过1重,2重,...,x-1重指针变量,而且已经将1重指针变量指向a变量,2重指针指向1重指针,...,x重指针指向x-1重指针。 问如何通过x重指针访问变量a? 输入 输入数据有多组,每组只描述x重指针变量的定义,定义格式为: intX Y; 其中X为若干个*,Y遵守C语言标识符命名规则。每行总长度不超过100个字符。 输入直到文件结束为止。 输出 每组输出一行,每行输出一串字符,表示如何通过定义的指针访问a变量,不留空格。 样例输入 int* p; int** prr; int**** yyy; 样例输出 *p **prr ****yyy 我的代码 #include<stdio.h> int main() { char str[101]; char* p; int i; while(scanf("%c",str)!=EOF) { for(i=1;*(str+i)=getchar(),str[i]!=';';i++); str[i]='\0'; for(i=0;*(str+i)!='*';i++); for(;*(str+i)=='*';i++) { putchar('*'); } for(;*(str+i)==' ';i++); printf("%s\n",str+i); } return 0; } 哪里错了
C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误
typedef struct s{ char *name; }student; /*将结构体读出并显示*/ int IsUsed(char *str) { FILE *fp = fopen("test","rb"); student s; s.name = (char*) malloc(sizeof(char)*20); fread(&s,sizeof(student),1,fp); while(!feof(fp)){ printf("%s",s.name); //为什么这里出错?????????????????? if(strcmp(s.name,str)==0){ fclose(fp); return 1; //存在该字符串,则返回1 } fread(&s,sizeof(student),1,fp); } fclose(fp); return 0; //不存在该字符串,则返回0 } int main() { FILE *fp = fopen("test","rb+"); /*先将结构体P存入二进制文件中*/ student p; p.name = (char*) malloc(sizeof(char)*20); scanf("%s",p.name); while(IsUsed(p.name)){ //检查员工号是否唯一 printf("该字符串已经存在,请更换一个:"); scanf("%s",p.name); } fwrite(&p,sizeof(student),1,fp); } 在printf哪里显示程序停止工作!!!!!!!!!求解啊
没有错误,没有警告,输入数值后,结果不对,求解 帮帮忙,
/*用递归法将一个整数n转换为相应的字符串,例如,输入483,输出的是字符串"483",n的位数不确定,可以是任意的正 整数。(说明详见实验指导书P264第(2)题)请在下面空白处,填写相应的程序段,并将程序保存于文件ex5_2.c中。*/ #include <stdio.h> #include <math.h> char c[1000]; void int_to_string(int n,int w) {int i=2,j=w-1,m=10; c[w+1]='\0'; c[w]=n%10+48; for(;i<=w;i++) {c[j--]=(n%10*i-n%10*(i-1))/m+48; m=m*10; } } int main() {int n,w=1; printf("请输入整数n\n"); scanf("%d",&n); if(n>9&&n<-9) {w=0; while(n!=0) {n=n/10; w++; } } int_to_string(n,w); puts(c); return 0; }
求解课设过程中出现的这个问题
使用二叉树完成的通讯录管理,输出的时候重复输出。。 代码:#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; /***************************************************** Description: 基于二叉排序树的通讯录管理系统 Function List: initdata() 初始化内置数据 insert() 添加联系人 find() 查找联系人 change() 修改联系人信息 del() 删除联系人 destory() 释放空间 *******************************************************/ typedef struct student { char name[12]; char sex[2]; char hometown[20]; char tel_num[20]; char post[6]; char email[20]; char QQ[20]; }student; //定义二叉链表结构体 //查找结果标记 student myClass[50]; int count = 0; //通讯录人数初始化 int flag; typedef struct tree { struct student *people; struct tree *left; struct tree *right; }tree; //定义树 tree *root = NULL; //根节点初始化为空 void initdata() //内置的联系人的初始化 { strcpy( myClass[count].name,"张小三"); strcpy( myClass[count].sex,"男"); strcpy( myClass[count].hometown,"南京"); strcpy( myClass[count].tel_num,"152****6578"); strcpy( myClass[count].post,"222666"); strcpy( myClass[count].email,"871011891@qq.com"); strcpy( myClass[count].QQ,"871011891"); count++; strcpy( myClass[count].name,"李小四"); strcpy( myClass[count].sex,"男"); strcpy( myClass[count].hometown,"上海"); strcpy( myClass[count].tel_num,"134****1786"); strcpy( myClass[count].post,"222787"); strcpy( myClass[count].email,"789455511@qq.com"); strcpy( myClass[count].QQ,"789455511"); count++; strcpy( myClass[count].name,"王二虎"); strcpy( myClass[count].sex,"女"); strcpy( myClass[count].hometown,"北京"); strcpy( myClass[count].tel_num,"177****4572"); strcpy( myClass[count].post,"244761"); strcpy( myClass[count].email,"1543694145@qq.com"); strcpy( myClass[count].QQ,"1543694145"); root = (tree *)malloc(sizeof(tree)); root->people = &myClass[0]; //记录下people的初始地址 root->left = NULL; root->right = NULL; } void insert(tree * root,student *q) //排序二叉树按姓名递归插入 { flag = 0; if(strcmp(root->people->name,q->name) == 0) { printf("插入不成功,相同姓名的人已存在\n"); flag = 1; return; } if( strcmp(root->people->name,q->name) > 0 )//调用strcmp函数比较字符串,判断是否有名字重复 { if(root->left == NULL) { tree *p = (tree *)malloc(sizeof(tree)); //给指针p分配一个tree型结构体大小的内存 p->people = q; p->left = NULL; p->right = NULL; root->left = p; } else { insert(root->left,q); //递归调用insert插入联系人 } } else { if( root->right == NULL) { tree *p = (tree *)malloc(sizeof(tree)); p->people= q; p->left = NULL; p->right = NULL; root->right = p; } else { insert(root->right,q); } } } int find(tree *root,char *p) //先跟遍历查找 { int flag; if( root!= NULL ) { if( strcmp(root->people->name,p) == 0) { printf("已找到该联系人:\n"); printf("姓名:%s 性别:%s 家乡:%s 电话:%s 邮编:%s Email:%s QQ:%s\n",root->people->name,root->people->sex,root->people->hometown,root->people->tel_num,root->people->post,root->people->email,root->people->QQ); return 1; //查找成功标记 } flag = find(root->left,p); if(flag>0) { return 1; } flag = find(root->right,p); if(flag > 0) { return 1; } } return 0; } /*修改联系人信息操作*/ int change(tree *root,char *p) //先根遍历,查找到后修改 { int flag; if(root != NULL) { if( strcmp(root->people->name,p) == 0) { int accept = 0; char buff[20]; while(1) { if(accept == 6) { system("cls"); break; } printf("姓名:%s 性别:%s 家乡:%s 电话:%s 邮编:%s Email:%s QQ:%s\n",root->people->name,root->people->sex,root->people->hometown,root->people->tel_num,root->people->post,root->people->email,root->people->QQ); printf("请输入要修改的选项:\n"); printf("1 修改姓名\n"); printf("2 修改性别\n"); printf("3 修改家乡\n"); printf("4 修改电话\n"); printf("5 修改邮编\n"); printf("6 修改Email\n"); printf("7 修改QQ\n"); printf("8 退出\n"); printf("请输入:"); scanf("%d",&accept); switch(accept) { case 1: { system("cls"); printf("你想把名字修改为:"); scanf("%s",buff); strcpy(root->people->name,buff); printf("修改成功\n"); break; } case 2: { system("cls"); printf("你想把性别修改为:"); scanf("%s",buff); strcpy(root->people->sex,buff); printf("修改成功\n"); break; } case 3: { system("cls"); printf("你想家乡把修改为:"); scanf("%s",buff); strcpy(root->people->hometown,buff); printf("修改成功\n"); break; } case 4: { system("cls"); printf("你想把电话修改为:"); scanf("%s",buff); strcpy(root->people->tel_num,buff); printf("修改成功\n"); break; } case 5: { system("你想把邮编修改为:"); scanf("%s,buff"); strcpy(root->people->post,buff); break; } case 6: { system("你想把Email修改为:"); scanf("%s,buff"); strcpy(root->people->email,buff); break; } case 7: { system("你想把QQ修改为:"); scanf("%s,buff"); strcpy(root->people->QQ,buff); break; } case 8:{ break;} default: { printf("输入有误,请重新输入\n"); break; } } } return 1; } flag = change(root->left,p); if(flag >0 ) { return 1; } flag = change(root->right,p); if(flag >0) { return 1; } } return 0; } /*打印出联系人信息*/ void print(tree *root) { if(root != NULL) { printf("姓名:%s 性别:%s 家乡:%s 电话:%s 邮编:%s Email:%s QQ:%s\n",root->people->name,root->people->sex,root->people->hometown,root->people->tel_num,root->people->post,root->people->email,root->people->QQ); print(root->left); putchar('\n'); print(root->right); } } tree * findparent(char *p,tree *root,tree *parent) //找寻待删除结点的父母结点 { if( root != NULL) { if( strcmp(root->people->name,p) == 0 ) { return parent; //和返回结点所在层次类似 } parent = findparent(p,root->left,root); if(parent != NULL) { return parent; } parent = findparent(p,root->right,root); if(parent != NULL) { return parent; } } return NULL; } void my_remove(tree *parent,tree *child) //删除结点 { if(child->left == NULL && child->right == NULL) //叶子节点 { tree *temp = child; if(temp == root) //删除的是根 { root = NULL; free(temp); return; } if(parent->left == child) //判断是父母的左孩子还是右孩子 { parent->left = NULL; } else { parent->right = NULL; } free(temp); } else { if( child->left != NULL && child->right == NULL) //1度结点 { if(parent == NULL) //删除的是根结点 { root = root->left; free(child); return; } if( parent->left == child) //判断左右孩子,由其父母收养 { parent->left = child->left; } else { parent->right = child->left; } free(child); } else if( child->left == NULL && child->right != NULL) { if(parent == NULL) { root = root->right; free(child); return; } if( parent->left == child) { parent->left = child->right; } else { parent->right = child->right; } free(child); } else //二度结点 { tree *temp,*temppar; temp = child->right; temppar = child; while(temp->left != NULL) //找其中根遍历下的后继结点 { temppar = temp; temp = temp->left; } strcpy(child->people->name,temp->people->name); strcpy(child->people->sex,temp->people->sex); strcpy(child->people->hometown,temp->people->hometown); strcpy(child->people->tel_num,temp->people->tel_num); strcpy(child->people->post,temp->people->post); strcpy(child->people->email,temp->people->email); strcpy(child->people->QQ,temp->people->QQ); if( temppar == child) //后继结点为待删除结点右孩子 { //注意这种情况 temppar->right = temp->right; } else { temppar->left = temp->right; } free(temp); } } } /*联系人的删除操作*/ void del(char *q) { tree *parent; parent = findparent(q,root,NULL); if( parent == NULL && ( strcmp( root->people->name,q) != 0 ))//判断通讯录是否为空以及传进来的联系人是否存在 { printf("通讯录中没有此联系人,删除失败\n"); return; } if( parent == NULL) //调用my_remove函数,//删除分两步,先找到其父母结点,再分情况删除 { my_remove(parent,root); } else { if( parent->left != NULL && (strcmp(parent->left->people->name,q) == 0 ) ) { my_remove(parent,parent->left); } else { my_remove(parent,parent->right); } } } void destory(tree *root) { if(root != NULL) //释放空间 { destory(root->left); destory(root->right); free(root); } } /*通讯录功能的展示界面以及联系人的显示界面*/ void disp() { int fun; char accept[20]; while(1) { printf("现有联系人按先序遍历如下:\n"); print(root); printf(" 请输入要选择的功能\n"); printf("/************************************/\n"); printf(" 1.添加联系人\n"); printf(" 2.修改联系人信息\n"); printf(" 3.查找联系人\n"); printf(" 4.删除联系人\n"); printf(" 5.退出\n"); printf("/************************************/\n"); printf("请输入:"); scanf("%d",&fun); switch(fun) { case 1: { system("cls"); if(root == NULL) { count++; root = (tree *)malloc(sizeof(tree)); printf("请输入要添加联系人的姓名\n"); scanf("%s",accept); strcpy(myClass[count].name,accept); printf("请输入要添加联系人的性别\n"); scanf("%s",accept); strcpy(myClass[count].sex,accept); printf("请输入要添加联系人的家乡\n"); scanf("%s",accept); strcpy(myClass[count].hometown,accept); printf("请输入要添加联系人的电话\n"); scanf("%s",accept); strcpy(myClass[count].tel_num,accept); printf("请输入要添加联系人的邮编\n"); scanf("%s",accept); strcpy(myClass[count].post,accept); printf("请输入要添加联系人的email\n"); scanf("%s",accept); strcpy(myClass[count].email,accept); printf("请输入要添加联系人的QQ\n"); scanf("%s",accept); strcpy(myClass[count].QQ,accept); root->people = &myClass[count]; root->left = NULL; root->right = NULL; printf("添加完成\n"); break; } count++; printf("请输入要添加联系人的姓名\n"); scanf("%s",accept); strcpy(myClass[count].name,accept); printf("请输入要添加联系人的性别\n"); scanf("%s",accept); strcpy(myClass[count].sex,accept); printf("请输入要添加联系人的家乡\n"); scanf("%s",accept); strcpy(myClass[count].hometown,accept); printf("请输入要添加联系人的电话\n"); scanf("%s",accept); strcpy(myClass[count].tel_num,accept); printf("请输入要添加联系人的邮编\n"); scanf("%s",accept); strcpy(myClass[count].post,accept); printf("请输入要添加联系人的email\n"); scanf("%s",accept); strcpy(myClass[count].email,accept); printf("请输入要添加联系人的QQ\n"); scanf("%s",accept); strcpy(myClass[count].QQ,accept); insert(root,&myClass[count]); if(flag == 1) { break; } printf("添加完成\n"); break; } case 2: { system("cls"); if(root == NULL) { printf("通讯录为空\n"); break; } printf("请输入要修改的联系人姓名:\n"); scanf("%s",accept); fun = change(root,accept); if(fun == '\0') { printf("没有你要联系人\n"); } break; } case 3: { system("cls"); if(root == NULL) { printf("通讯录为空\n"); break; } printf("请输入要查找的联系人姓名:\n"); scanf("%s",accept); fun = find(root,accept); if(fun == 0) { printf("联系人未找到\n"); } break; } case 4: { system("cls"); if( root == NULL) { printf("通讯录为空\n"); break; } printf("请输入要删除的联系人姓名:"); scanf("%s",accept); del(accept); break; } case 5: { system("cls"); printf("正在清除数据\n"); destory(root); printf("欢迎使用本通讯录,seeyou!\n"); exit(0); } default: { system("cls"); printf("输入有误,请重新输入!\n"); break; } } } } int main() { int i; printf("正在初始化系统\n"); initdata(); for(i = 1;i <= count;i++) { insert(root,&myClass[i]); } disp(); return 0; }![图片](https://img-ask.csdn.net/upload/201701/01/1483283932_867316.png)
求解错误的地方怎么改啊
#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<dos.h> #define K 5 /*商品的结构体*/ struct commodity { char name[15];//商品的名字 int number; //商品的编号 int jiage;//商品的价格 int shuliang;//商品的数量 char shengchanchangjia[10];//商品的生产厂家 } struct commodity coom[co]={{"苹果",001,5,5},{"菠萝",002,3,3}}; //定义一个数组 int num=2; //商品的种数数量 /*声明*/ void home page(); //首页 int Verification(charPassword[]); //增加密码的验证 int Main menu(); //主菜单 void input(); //商品信息的输入 void modify(); //商品信息的修改 void delet(); //商品信息的删除 void order(); //商品信息的排序 void search(); //商品信息的查询 void show(); //商品信息的显示 void Exit(); //商品信息的退出 void main() { int n; char Password[10]={"123456789"}; //初始密码为123456789 home page();//首页 n=Verification(Password); //验证密码 switch(n) { case 1 : printf("\n注意:如果你的密码连续错误三次,系统将会退出。\n"); break; case 2 : Main menu(); //显示主菜单 break; } printf("系统退出!\n"); exit(0); } /*显示作者的基本信息*/ void home page() { printf("\t 欢迎进入商品管理系统 \n"); printf("\t 专业:计算机科学与技术 \n"); printf("\t 班级:计算机科学与技术班\n"); printf("\t 姓名:000 \n"); printf("\t 学号:0000 \n"); /*验证密码*/ int Verification(char Password[]) { int i=0; int j=3; int m; char Password1[10]; printf("请你输入商品管理系统的密码"); for(m=0;m<9;m++) { Password1[m]=getch(); //输入密码但是密码不显示 putchar('*'); //密码用*来显示 } Password1[9]='\0'; //添加串结束标志 printf("\n"); //换行 for(i=0;j!=0;i++) if(strcmp(Password1,Password)==0) //比较输入的密码是否正确,如果正确,则程序继续下去。 { printf("你输入的密码正确,你将进入商品管理系统\n"); system("pause"); //屏幕暂停 return 1; } else //如果密码不正确,则程序运行此处 { --j; if(j==0) { return 0; } printf("\n密码错误,你还有%d次机会,\n请你再次输入密码:",j); for(m=0;m<9;m++) { Password1[m]=getch(); //输入的密码不会显示出来 putchar('*'); //输入的密码显示* } Password1[9]='0'; //添加串结束标志 printf("\n"); } } return 0; } //定义主菜单栏,输入数字进行操作 int Main menu() { system("cls"); //清除屏幕消息 int num; //选择的数字 printf("\n\n\n\n\n"); printf("\t\t--------欢迎将进入商品管理系统--------\n"); printf("\t\t\t 1:商品信息的输入?\n"); printf("\t\t\t 2:商品信息的修改?\n"); printf("\t\t\t 3:商品信息的删除?\n"); printf("\t\t\t 4:商品信息的排序?\n"); printf("\t\t\t 5:商品信息的查询?\n"); printf("\t\t\t 6:商品信息的显示?\n"); printf("\t\t\t 7:商品信息的退出?\n"); printf("\t\t\t请你输入1-7的任意数字:"); scanf("%d",&num); switch(num) //通过输入数字来操作事件 { case 1 : input(); //输入 break; case 2 : modify(); //修改 break; case 3 : delet(); //删除 break; case 4 : order(); //排序 break; case 5 : search(); //查询 break; case 6 : show(); //显示 break; case 7 : Exit(); //退出 break; default : Main menu(); break; } //switch结束 } //函数结束 //录入商品数据信息 void input() { system("cls"); //清屏 char a; //录入一个字符 printf("是否输入商品的信息?(yes/no)"); fflush(stdin); //刷新标准输入缓冲区,把输入缓冲区里的东西丢掉 scanf("%c,&a"); while(a=='yes') { printf("请你输入商品的名字:"); //输入商品名字 scanf("%s",&coom[num].name); printf("请你输入商品的编号"); //输入商品编号 scanf("%d",&coom[num].number); printf("请你输入商品的价格"); //输入商品价格 scanf("%d",&coom[num].jiage); printf("请你输入商品的数量"); //输入商品数量 scanf("%d",&coom[num].shuliang); printf("请你输入商品的生产厂家"); //输入商品生产厂家 scanf("%s",&coom[num].shengchanchangjia); num++; //增加商品的数量 printf("请问你是否继续?(yes/no)"); fflush(stdin); //刷新标准输入缓冲区,把输入缓冲区里的东西丢掉 scanf("%c",&a); } //结束while的循环 Main menu(); } //结束该函数 //修改商品信息 void modify() { int k=0; //变量 int l=0; //变量 char a; //录入一个字符 system("cls"); //清除屏幕消息 printf("请你输入要修改的商品编号"); fflush(stdin); //刷新标准输入缓冲区,把输入缓冲区里的东西丢掉 scanf("%d",&k); while(k!=coom[l].number) { l++; if(l>=num) { printf("这里没有你需要修改的商品信息。\n"); modify(); } //结束if的判断 } //结束while的循环 fflush(stdin); //刷新标准输入缓冲区,把输入缓冲区里的东西丢掉 printf("请你输入商品的名称"); scanf("%s",&coom[l].name); printf("请你输入商品的价格"); scanf("%d",&coom[l].jiage); printf("请你输入商品的数量"); scanf("%d",&coom[l].shuliang); printf("请你输入商品的生产厂家"); scanf("%s",&coom[l].shengchanchangjia); printf("你的修改已经完成,你是否继续(yes/no)"); fflush(stdin); scanf("%c",&a); if(a=='yes') modify(); //继续修改 else Main menu(); //到菜单 } //修改函数结束 //商品的删除 void delet(); { int z; int x=0; char a; system("cls"); //清屏 printf("请你输入你要删除的商品编号"); fflush(stdin); scanf("%d",&z); while(z!=coom[x].number) { x++; if(x>=num) { printf("这里没有你需要删除的商品信息"); modify(); } //结束if } //结束while的循环 for(;x<num;x++) { coom[x].number=coom[x+1].number; strcpy(coom[x].name,coom[x+1].name); coom[x].jiage=coom[x+1].jiage; coom[x].shuliang=coom[x+1].shuliang; } num--; //商品的总数数量减少一个 printf("已经删除商品的信息,你是否要继续(yes/no)"); fflush(stdin); //刷新标准输入缓冲区,把输入缓冲区里的东西丢掉 scanf("%c",&a); if(a=='yes') delet(); //继续删除 else Main menu(); //返回到菜单 } //排序 void order() { struct commodity temp; int q; int w; char a; system("cls"); //清屏 printf("通过商品的数量来进行排序\n"); printf("商品编号 商品名称 价格 数量 生产厂家\n"); for(q=0;q<num;q++) for(w=q+1;w<num;w++) if(coom[q].shuliang<coom[w].shuliang) { temp=coom[q]; coom[q]=coom[w]; coom[w]=temp; } for(q=0;q<num;q++) { printf("%d",&coom[q].number); printf("%s",&coom[q].name); printf("%d",&coom[q].jiage); printf("%d",&coom[q].shuliang); printf("%s",&coom[q].shengchanchangjia); } printf("输入0来退出排序系统\b"); scanf("%d",&a); if(a==0) //循环停止,排序系统退出 { system("cls"); //清除屏幕 Main menu(); //返回菜单 } } //查询 void search() { char name[15]; char a; int r=0; system("cls"); //清除屏幕消息 printf("请你输入要查询的商品名称"); scanf("%s",name); while(strcmp(name,coom[r].name)!=0) { r++; if(r>=num) { printf("这里暂时没有你要查询发的商品信息"); search(); } //结束if的判断 } //结束while循环 printf("商品名称\t商品编号\t商品价格\t商品数量\t商品生产厂家\n"); printf("%s",&coom[r].name); printf("%d",&coom[r].number); printf("%d",&coom[r].jiage); printf("%d",&coom[r].shuliang); printf("%s",&coom[r].shengchanchangjia); printf("查询结束"); search();} //显示 void show() { int t; char a; system("cls"); printf("商品名称\t商品编号\t商品价格\t商品数量\t商品生产厂家\n"); for(t=0;t<num;t++) { printf("%s",&coom[t].name); printf("%d",&coom[t].number); printf("%d",&coom[t].jiage); printf("%d",&coom[t].shuliang); printf("%s",&coom[t].shengchanchangjia); } printf("返回菜单"); fflush(stdin); show(); } //退出 void Exit() { char a; system("cls"); printf("你是否要退出系统(yes\n)"); fflush(stdin); scanf("%c",&a); if(a=='yes') printf("感谢你使用商品管理系"); else Main menu(); }
求解小白很急在线等,
题目内容: 从键盘输入6位仅由数字0~9组成的密码。用户每输入一个密码并按回车键后,程序给出判断:如果是数字,则原样输出该数字,并提示用户目前已经输入了几位密码,同时继续输入下一位密码;否则,程序提示"error",并让用户继续输入下一位密码。直到用户输入的密码全部是数字为止。 以下为程序的运行结果示例: Input your password: 1↙ 1, you have enter 1-bits number 6↙ 6, you have enter 2-bits number a↙ error d↙ error 4↙ 4, you have enter 3-bits number 6↙ 6, you have enter 4-bits number 8↙ 8, you have enter 5-bits number 2↙ 2, you have enter 6-bits number 输入提示信息:"Input your password:\n" 输入格式: "%c" 输出格式: 如果输入的是数字,输出格式为:"%c, you have enter %d-bits number\n" 如果输入的不是数字,输出提示信息:"error\n" 为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 小白的程序: #include<stdio.h> int main() { int i=1; printf("Input your password:\n"); while(i<=6) { char m; scanf("%c",&m); if(m>='0'&&m<='9') { printf("%c, you have enter %d-bits number\n",m,i); i++; } else printf("error\n"); } return 0; } 那么问题来了,为什么输出的结果不对
求大神更正一下哈夫曼编码,重谢!
#include<stdio.h> #include<string.h> #include<malloc.h> static float weights[]={12.702 ,9.056 ,8.167 ,7.507 ,6.966 ,6.749 ,6.327 , 6.094 ,5.987 ,4.253 ,4.025 ,2.782 ,2.758 ,2.406 , 2.360 ,2.228 ,2.105 ,1.974 ,1.929 ,1.492 ,0.978 , 0.722 ,0.153 ,0.150 ,0.095 ,0.074 };//权值信息数组 static char values[]={'e','t','a','o','i','n','s', 'h','r','d','l','c','u','m', 'w','f','g','y','p','b','v', 'k','j','x','q','z'}; //字符数组信息 typedef struct{ float weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树 typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表 int min(HuffmanTree t,int i){ int j,mark; float k=26.4170; for(j=1;j<=i;j++){ if(t[j].weight<k&&t[j].parent==0){ k=t[j].weight; mark=j; } } //逐个迭代求解求小权值 t[mark].parent=1; //对选中节点进行标记,防止二次访问 return mark; //返回选中节点的索引值 } //返回i个节点中权值最小的树的根节点序号 void select(HuffmanTree t,int i,int &s1,int &s2){ int temp; //中间变量 s1=min(t,i); s2=min(t,i); if (s1>s2){ temp=s1; s1=s2; s2=temp; } } //从i个节点中选择两个权值最小的节点 void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,float *w,int n){ int m,i,s1,s2,start; //中间变量 unsigned c,f; HuffmanTree p; char *cd; if (n<=1){ return; } m=2*n-1; //所需节点总数 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for (p=HT+1,i=1;i<=n;++i,++p,++w){ (*p).weight=*w; (*p).parent=0; (*p).lchild=0; (*p).rchild=0; } //初始化终端节点 for(;i<=m;++i,++p){ (*p).weight=0.0; (*p).parent=0; (*p).lchild=0; (*p).rchild=0; } //初始化非终端节点 for (i=n+1;i<=m;++i){ select(HT,i-1,s1,s2); HT[s1].parent=HT[s2].parent=i; //更新终端节点信息 HT[i].lchild=s1; HT[i].rchild=s2; //更新非终端节点的子节点的索引值 HT[i].weight=HT[s1].weight+HT[s2].weight; //更新非终端节点的权值 } //创建哈夫曼树 HC=(HuffmanCode)malloc((n+1)*sizeof(char*));//创建存储节点哈夫曼编码的数组 cd=(char*)malloc(n*sizeof(char));//中间变量 cd[n-1]='\0';//字符串结束符 for (i=1;i<=n;i++){ start=n-1; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent){ if(HT[f].lchild==c){ cd[--start]='0';//左分支为'0' } else{ cd[--start]='1';//右分支为'1' } }//根据节点的父节点索引值求解节点的哈夫曼编码 HC[i]=(char*)malloc((n-start)*sizeof(char)); //动态分配对应编码存储空间大小 strcpy(HC[i],&cd[start]);//字符串拷贝 } free(cd);//释放内存空间 } void coding(HuffmanCode HC){ int index;//索引变量 int textIndex;//电报正文索引值 int valueIndex;//电报正文字符的索引值 int teleLength;//电报正文包含的字符个数 int *codeIndex;//电报正文字符对应的哈夫曼编码表中的索引呢 char *teleText;//中间变量,存储电报正文 char *huCoding;//中间变量,用于存储电报正文的哈夫曼编码 int codeLength=0;//电报正文对应哈夫曼编码的总长度,初始化长度为0 printf("请输入电报正文长度:"); scanf("%d",&teleLength); codeIndex=(int*)malloc(teleLength*sizeof(int));//分配用于存储编码表索引值的存储空间 teleText=(char*)malloc(teleLength*sizeof(char)); printf("请输入电报正文:"); scanf("%s",teleText);//输入电报正文字符串 for(textIndex=0;textIndex<strlen(teleText);textIndex++){ char textChar; textChar=teleText[textIndex]; if((textChar<65)||(textChar>122)||(textChar<97&&textChar>90)){ printf("您输入了不合法字符%s!\n",teleText); return; }//如果输入非法字符,程序返回 if (textChar<96){ textChar=textChar+32; }//如果电报正文为大写则进行转化 for(valueIndex=1;valueIndex<=26;valueIndex++){ if(values[valueIndex-1]==textChar){ codeIndex[textIndex]=valueIndex;//累计编码的索引值 codeLength+=strlen(HC[valueIndex]);//找到对应字符,累计编码长度值 break; } }//依次查找对应字符 } //根据哈夫曼编码表对电报正文进行编码 huCoding=(char*)malloc((codeLength+1)*sizeof(char));//动态分配存储电文编码的内存空间 for(index=0;index<=codeLength;index++){ huCoding[index]='\0';//字符串结束符 }//初始化上述内存数据 for(textIndex=0;textIndex<strlen(teleText);textIndex++)//strlen计数 { huCoding=strcat(huCoding,HC[codeIndex[textIndex]]);//编码字符串连接 }//组装电文编码信息 printf("电报正文的哈夫曼编码:%s\n",huCoding); free(teleText); free(codeIndex); free(huCoding);//释放内存空间 } void decoding(HuffmanTree HT){ int index;//索引变量 int tempIndex=47;//记录临时索引值 char huCode;//单个编码 int huCodeLen;//电文编码的长度 char *huCodes;//电文字符串 HTNode htNode;//哈夫曼树的节点 printf("请输入电报正文哈夫曼编码长度:"); scanf("%d",&huCodeLen); huCodes=(char*)malloc(huCodeLen*sizeof(char));//分配用于存储电文字符编码的存储空间 printf("请输入电报正文的哈夫曼编码字符串:"); scanf("%s",huCodes);//输入电报正文的编码字符串 htNode=HT[47]; for(index=0;index<strlen(huCodes);index++){ huCode=huCodes[index];//获取单个编码字符 if(tempIndex<=0){ printf("您输入的哈夫曼编码%s不合法!\n",huCodes); return; }//没有找到对应编码字符 if(huCode=='1'){ if(HT[htNode.rchild].lchild==0 && HT[htNode.rchild].rchild==0){ tempIndex=htNode.rchild; printf("%c",values[tempIndex-1]);////遍历至叶子节点,找到一个电文子字符 htNode=HT[47];//再次指向根节点 } else{ tempIndex=htNode.rchild; htNode=HT[tempIndex];////继续遍历,记录当前节点的信息 } } //向右遍历 else if(huCode=='0'){ if(HT[htNode.lchild].lchild==0 && HT[htNode.lchild].rchild==0){ tempIndex=htNode.lchild; printf("%c",values[tempIndex-1]);//遍历至叶子节点,找到一个电文子字符 htNode=HT[47];//再次指向根节点 } else{ tempIndex=htNode.lchild; htNode=HT[tempIndex];//继续遍历,记录当前节点的信息 } } //向左遍历 else{ printf("您输入的电报正文编码%s不合法!",huCodes); return; } } printf("\n"); } //将电报正文的哈夫曼编码进行译码操作 void printfHuffmanTree(HuffmanTree HT){ int index; HTNode htNode;//哈夫曼树节点 printf("*************哈夫曼树表***********\n"); printf(" 权值 根节点 左子树 右子树\n"); for(index=1;index<48;index++){ htNode=HT[index];//获取当前树节点 printf("%12.4f%5d%6d%7d\n",htNode.weight,htNode.parent,htNode.lchild,htNode.rchild); } } //打印哈夫曼树表 void printfHuffmanCode(HuffmanCode HC){ int index; printf("*******哈夫曼编码表*******\n"); for(index=1;index<=26;index++){ printf("%7c ------ ",values[index-1]); printf("%s\n",HC[index]); } } //打印哈夫曼编码表 int main(){ HuffmanTree HT; HuffmanCode HC; HuffmanCoding(HT,HC,weights,26);//构造哈夫曼树 while(1){ int a; printf("*******欢迎使用哈夫曼编码程序!*******\n"); printf("*********请输入您需要进行的操作*********\n"); printf("-->1.对电报正文编码 -->2.对电报编码译码\n"); printf("-->3.打印哈夫曼编码 -->4.打印哈夫曼树\n"); printf("****************选择0退出程序****************\n"); scanf("%d",&a); getchar(); switch(a){ case 0: return 0; break; case 1: coding(HC);//编码,对已建好的哈夫曼树,对电报正文进行编码 break; case 2: decoding(HT);//译码,对电文的内容进行编码翻译处理 break; case 3: printfHuffmanCode(HC); break; case 4: printfHuffmanTree(HT); break; default: printf("您的输入有误!\n"); break; } } }
新人求解这个错误是什么意思?
字符串连接,不用库函数s'tract ``` #include <stdio.h> int main() { int i=0,j=0; char a[100],b[100]; scanf("%s\n",&a[100]); scanf("%s",&b[100]); while(a[i]!='\0') { i++; } while(a[j]!='\0') { a[i+j]=b[j]; j++; } a[i+j]='\0'; printf("%s",a[100]); return 0; } ``` 18|warning: format '%s' expects argument of type 'char*', but argument 2 has type 'int' [-Wformat=]|
关于C语言OJ的一道题:Time Limit Exceeded
hihoCoder上的一道关于KMP算法的一道题,题目描述如下: #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。 这一天,他们遇到了一只河蟹,于是河蟹就向小Hi和小Ho提出了那个经典的问题:“小Hi和小Ho,你们能不能够判断一段文字(原串)里面是不是存在那么一些……特殊……的文字(模式串)?” 小Hi和小Ho仔细思考了一下,觉得只能想到很简单的做法,但是又觉得既然河蟹先生这么说了,就肯定不会这么容易的让他们回答了,于是他们只能说道:“抱歉,河蟹先生,我们只能想到时间复杂度为(文本长度 * 特殊文字总长度)的方法,即对于每个模式串分开判断,然后依次枚举起始位置并检查是否能够匹配,但是这不是您想要的方法是吧?” 河蟹点了点头,说道:”看来你们的水平还有待提高,这样吧,如果我说只有一个特殊文字,你能不能做到呢?“ 小Ho这时候还有点晕晕乎乎的,但是小Hi很快开口道:”我知道!这就是一个很经典的模式匹配问题!可以使用KMP算法进行求解!“ 河蟹满意的点了点头,对小Hi说道:”既然你知道就好办了,你去把小Ho教会,下周我有重要的任务交给你们!“ ”保证完成任务!”小Hi点头道。 提示一:KMP的思路 提示二:NEXT数组的使用 提示三:如何求解NEXT数组 输入 第一行一个整数N,表示测试数据组数。 接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。 其中N<=20 输出 对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。 样例输入 5 HA HAHAHA WQN WQN ADA ADADADA BABABB BABABABABABABABABB DAD ADDAADAADDAAADAAD 样例输出 3 1 3 1 0 这是我按照自己的理解提交的代码: #include<stdio.h> #include<string.h> #include<stdlib.h> int KMP(char *ori,char *pat); int main(void) { char *ori,strori[10001]; char *pat,strpat[1000001]; int n;//测试组数 pat=strpat;//必须初始化 有所指向才行 ori=strori; scanf("%d\n",&n); while(n--) { scanf("%s",pat); scanf("%s",ori); printf("%d\n",KMP(ori,pat)); } return 0; } int KMP(char *ori,char *pat) { char *temp,*p; int num=strlen(pat); int i=0,j=0; int *next; int sum=0; //求出next数组 next=(int *)malloc(num*sizeof(int)); memset((int *)next,0,num*sizeof(int)); p=temp=pat; pat++; while(*pat) { if(*pat==*temp) { *(next+i+1)=j+1; pat++; temp++; j++; } else { pat++; j=0; } i++; } //匹配字符串 pat=temp=p; i=j=0; while(*ori) { if(*ori!=*pat) { ori++; if(i!=0)//表明之前有匹配成功过,但还未完全匹配 { ori=ori-1-*(next+i-1);//ori=ori-i-1+(i-*(next+i-1)); pat=p; i=0; } } else { ori++; pat++; i++; if(*pat=='\0') { sum++; ori=ori-1-*(next+i-1); pat=p; i=0; } } } return sum; } 但每次提交结果都是: Time Limit Exceeded TLE 用户程序运行时间超过题目的限制 怎么优化一下我的代码才能是它AC啊?!求大神指导啊。
小白看着大神:内心渴望满满:千言万语归为一句话:哪位大神帮我看看这个程序
题目内容: n块砖( 27<n<=77 ),36人搬,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?请用穷举法编程求解,n的值要求从键盘输入。输出结果按照男人数量升序给出(见下面示例3)。 程序的运行结果示例1: Input n(27<n<=77): 28↙ men=0,women=4,children=32 程序的运行结果示例2: Input n(27<n<=77): 36↙ men=3,women=3,children=30 程序的运行结果示例3: Input n(27<n<=77): 60↙ men=2,women=14,children=20 men=7,women=7,children=22 men=12,women=0,children=24 输入提示: "Input n(27<n<=77):\n" 输入格式: "%d"   输出格式:"men=%d,women=%d,children=%d\n" 为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 我的代码: #include<stdio.h> int main() { int n,x,y,z; printf("Input n(27<n<=77):\n"); scanf("%d",&n); while(x>=0&&x<=20) { while(y>=0&&y<=25) { while(z>=0&&z<=150) { if(x*4+y*3+z/2==n) printf("men=%d,women=%d,children=%d\n",x,y,z); } } } return 0; } 那么问题来了,为啥我按下回车键它没有反应
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的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岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
使用 Python 和百度语音识别生成视频字幕
文章目录从视频中提取音频根据静音对音频分段使用百度语音识别获取 Access Token使用 Raw 数据进行合成生成字幕总结 从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞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 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
Python全栈 Linux基础之3.Linux常用命令
Linux对文件(包括目录)有很多常用命令,可以加快开发效率:ls是列出当前目录下的文件列表,选项有-a、-l、-h,还可以使用通配符;c功能是跳转目录,可以使用相对路径和绝对路径;mkdir命令创建一个新的目录,有-p选项,rm删除文件或目录,有-f、-r选项;cp用于复制文件,有-i、-r选项,tree命令可以将目录结构显示出来(树状显示),有-d选项,mv用来移动文件/目录,有-i选项;cat查看文件内容,more分屏显示文件内容,grep搜索内容;>、>>将执行结果重定向到一个文件;|用于管道输出。
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
立即提问