C语言中怎么用数组接收多个字符串

#include

int main() {

char *colour[5];

colour[0] = "red";
colour[1] = "yellow";
colour[2] = "green";
colour[3] = "blue";
colour[4] = "pink";

return 0;

}

//请问这种方法对不对?
//如果想用键盘输入(scanf),该怎么定义?

3个回答

 #include <stdio.h>
#include <stdlib.h>

int main()
{
    char ** color = (char **)malloc(5 * sizeof (char *));
    for (int i = 0; i < 5; i++)
    {
        color[i] = (char *)malloc(100 * sizeof (char));
        scanf("%s", color[i]);
    }
    for (int i = 0; i < 5; i++)
        printf("%s", color[i]);
}
 char colour[5][];
xi_ui
xi_ui 这种方法也没法用scanf接收
接近 5 年之前 回复

你的写法也就可以的,即使用:指针数组。colour 的每个元素都是指针,没有问题。

xi_ui
xi_ui 回复91program: 好的,我去搜一下
接近 5 年之前 回复
91program
91program 回复xi_ui: 为一个指针分配空间你不会吗? 如果你是初学者,可以多 Baidu 或者 google,网上这种代码很多的。
接近 5 年之前 回复
xi_ui
xi_ui 能不能麻烦你把代码大体写一下
接近 5 年之前 回复
91program
91program 回复xi_ui: 你要先为指针分配空间,否则运行时会直接报非法访问的错误。你可以让没有分配空间的指针指向常量,但不能用它存贮输入的字符串。
接近 5 年之前 回复
xi_ui
xi_ui 我这样写可以直接赋值,但是没法从键盘用scanf输入,有没有能从键盘输入的方法
接近 5 年之前 回复
xi_ui
xi_ui 对不起,键盘不太好了,不小心按多了
接近 5 年之前 回复
xi_ui
xi_ui 回复91program: char *colour[5]; printf("请输入五种颜色\n"); for (int a = 0; a < 5; a++) { scanf("%s",colour[a]); }
接近 5 年之前 回复
xi_ui
xi_ui 回复91program: char *colour[5]; printf("请输入五种颜色\n"); for (int a = 0; a < 5; a++) { scanf("%s",colour[a]); }
接近 5 年之前 回复
xi_ui
xi_ui 回复91program: char *colour[5]; printf("请输入五种颜色\n"); for (int a = 0; a < 5; a++) { scanf("%s",colour[a]); }
接近 5 年之前 回复
xi_ui
xi_ui 回复91program: char *colour[5]; printf("请输入五种颜色\n"); for (int a = 0; a < 5; a++) { scanf("%s",colour[a]); }
接近 5 年之前 回复
91program
91program 你的写法也是可以的(上面输入 错误了,不好意思)
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言中字符数组作为函数返回值时出现的问题

我想请教一个问题,我在C语言中用字符数组作为函数返回值时,会在返回后多出一个0x01对应的字符,下面贴出程序和调试过程: 子函数如下: ```c char *guess_num(int gen_data[], int input_data[], int n) { int i = 0, j = 0, k = 0; static char result[NUM_GUESS]; for(i = 0; i < n; i++) for(j = 0; j < n; j++) if(0 == input_data[i]-gen_data[j]) { if(0 == i-j) result[k++] = 'A'; else result[k++] = 'B'; } if('\0' == result[0]) for(i = 0; i < n; i++) result[i] = '0'; return result; } ``` 测试情况如下: 第一个测试 ![返回前](https://img-ask.csdn.net/upload/201705/08/1494222074_932652.png) ![返回后](https://img-ask.csdn.net/upload/201705/08/1494222104_649849.png) 可以看到,当字符数组的四个元素都被赋值之后,返回前没有问题,但是当主函数接收到返回的字符数组的首地址之后,字符数组后面会多出一个1. 第二个测试 ![返回前](https://img-ask.csdn.net/upload/201705/08/1494221980_315560.png) ![返回后](https://img-ask.csdn.net/upload/201705/08/1494221998_129015.png) 当字符数组元素未全部赋值时,返回没问题 第三个测试 ![返回前](https://img-ask.csdn.net/upload/201705/08/1494222090_919784.png) ![返回后](https://img-ask.csdn.net/upload/201705/08/1494222109_274407.png) 又看到了熟悉的1。。。。。。。 烦请各位能否帮我解答这个问题,谢谢!

32位的整数的运算实现IP地址的算法,C语言的字符数组的运用怎么做

Problem Description 在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。 但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。 Input 输入有多个case,每个case有一行,不超过100个字符。 Output 对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。 Sample Input 192.168.100.16 Sample Output YES

C语言如何提取命令行输入的字符串中的整数,并传递到自定义函数?

比如 键盘输入: gcd(n,m) ⭐**在函数中提取m,n的值并计算结果? (因为有多个整形数值,并且有个','所以这种下面写法无法实现取值。。。。** ``` char str[80], digit[80]; char* ps; int i = 0; ps = str; while (*ps != '\0') { if (*ps >= '0' && *ps <= '9' || ps==',') { digit[i] = *ps; //找到数字,存放到数组digit里 i++; } ps++; //ps指针指向字符串下一个字符 } digit[i] = '\0'; //为了能用%s输出,digit在末尾要加一个结束字符'\0' printf("%s\n", digit); ```) `` ``` **如果要传递m,n,o,q多个整形数据呢? ** 以下是我代码的摘要 ``` int main(argc,argv[]) char* stdinin = NULL; stdinin = ufgets(stdin); //ufgets是自定义函数,类似于fgets //然后是一些判断是否输入为空等 if (strncmp(stdinin, "gcd", 3) == 0) gcd(m, n); //----函数----- void gcd(n, m) { 这里并不能直接使用stdinin } ```

根据输入字符结束数组输入

我的意思是说,比如要输入一个不定长的数组(或者是字符串),提示用户输入完后以某个字符或者标志结束,这个要怎么实现啊?

【C语言编写函数问题】从键盘输入一个字符串,编写程序完成 如下功能:

(1) 编写一个函数,提取一个字符串中的所有整数。整数提取规则为:连续 的数字字符构造一个整数,如果整数位数超过 6 位,则在第 7 位开始构建一 个新的整数。 (2) 编写一个函数,对(1)步提取的所有整数按照从小到大的顺序排序。 (3) 编写一个函数,输出提取的所有整数。 (4) 编写相关测试程序。 (没有学到指针)麻烦大神们给个详细的程序,做了几个小时了一直不成功。不知道在问题1中返回的值如何返回,并在2中使用,求详细解答,谢谢啦

C语言scanf函数连续输入问题

![图片说明](https://img-ask.csdn.net/upload/201703/07/1488858681_565360.png)

编写一个函数,该函数将筛选出两个字符串参数中相同的字符,并按字母序进行排序后返回

本题是某欧外企面试题,下面给出一个我当时的C语言解法,希望请教各位高手们更为高效的解法。 char *func(const char *s1, const char *s2) { char temp[256];//ascii_table memset(temp, 0, sizeof(temp)); char *p1 = s1, *p2 = s2; int len = 0; for(; *p1!=0; p1++) { if( !temp[*p1] ) temp[*p1] = 1; } for(; *p2!=0; p2++) { if( temp[*p2]==1 ) { temp[*p2]++; len++; } } char *ret = (char *)calloc(1, len+1); //already clear assert(ret); p1 = ret; // p1 points to ret-array int i; for(i = 0; i<sizeof(temp); i++) { if(temp[i] > 1) *p1++ = temp[i]; } return ret; } 但是由于其中用到多次for循环,而导致效率并未最好。当然我可以将temp这个ascii数组改为一个大小为26的字母表数组从而减小最后一个for循环的次数。但除此之外,还有什么能够再次进行优化的吗?

初学字符串的实际工程问题4,5,6

编程任务编号 L: 压缩空格和换行符 任务描述 将网页中文本复制到文本编辑中经常会产生大量的连续空格和换行符。现在要求将连续的空格压缩为1个空格,连续的换行符压缩为1个换行符。 输入 1个字符以上的任意长度英文文本。注意,文本可能会很长,很长,很长。 输出 压缩空格和回车后的文本。 输入举例 It is a cat, I like it. 输出举例 It is a cat, I like it. 我的程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char sentence[100001]; int i,len; gets(sentence); len=strlen(sentence); for(i=0; i<len; i++) { if((sentence[i+1]!=32)&&(sentence[i]==32)||(sentence[i+1]!=32)&&(sentence[i]!=32)||(sentence[i+1]=32)&&(sentence[i]!=32)) printf("%c",sentence[i]); } scanf("\n"); scanf("\n"); printf("\n"); gets(sentence); len=strlen(sentence); for(i=0; i<len; i++) { if((sentence[i+1]!=32)&&(sentence[i]==32)||(sentence[i+1]!=32)&&(sentence[i]!=32)||(sentence[i+1]=32)&&(sentence[i]!=32)) printf("%c",sentence[i]); } return 0; ------------------------------------------------------------------------------- 编程任务编号 M: 统计单词数 任务描述 在写文档或投稿时经常需要计算一篇文档中的单词数,先给定一篇英文的文档,请统计单词的个数。在此“1个单词”定义为:一个或多个空格或换行符分隔的字符串计为一个单词。当然,连续的空格和换行符不是“1个单词”。虽然这个定义不甚准确但实用。 输入 1个字符以上的任意长度英文文本。注意,文本可能会很长,很长,很长。输入中单词的个数可能达到4294967296(即2的32次方)个。 输出 单词的个数。 输入举例 It is a cat, I like it. 输出举例 7 注意事项 注意: 1:应该注意考虑特殊情况:例如文章开始处有若干空格或者回车的情形。 2:当以如下的方式使用字符数组输入字符串数据时: char str[此处为足够大的数组元素个数]; scanf("%s",str); 当输入字符串中包含空格、回车或者跳格字符时,空格、回车和跳格将被认为是2个字符串之间的分隔,因此用这种方法输入的字符串中不可能包含空格、回车和跳格字符的。 3:当需要以行为单位,输入一行一行的字符串,那么可利用gets(str)来输入一行字符串是,输入到字符串变量中的字符可包含空格和跳格字符,但是不能包含回车字符。对于没有给定数据长度的情况,可以利用gets( )函数的返回值为为空(它输入数据已经输入完毕)来判断输入是否结束。例如,如下形式。 char str[足够大的元素个数]; while (gets(str)!=NULL) { //每循环一次,处理每一行字符串 } 4:如果需要单个字符处理,则必须使用scanf("%c",&c);或者 ch=getchar();此时,不管任何字符都可以输入到字符变量中包括空格、回车和跳格字符。 while(scanf("%c",&ch) { //每循环一次,处理一个字符 } 我的程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {char word[100001]; int len,i,sum=0; gets(word); len=strlen(word); for(i=0;i<len;i++) { if(word[i]==32&&word[i+1]!=32) { sum++; } } scanf("\n"); scanf("\n"); printf("\n"); gets(word); len=strlen(word); for(i=0;i<len;i++) { if(word[i]==32&&word[i+1]!=32) { sum++; } } printf("%d",sum); return 0; } ---------------------------------------------------------------------------------- 编程任务编号 T: 英汉字典之(初级版) 任务描述 请设计一个简单的英汉字典实现从英文到汉语的翻译。 输入 第一行包含一个数字n(1≤n≤100),表示字典中词条的数目。每个词条的第一个空格前是一个英文单词,其后为中文解释。英文单词的字母个数不超过50个。中文解释的长度不超过200个汉字(包括标点和空格)。紧接着一个整数k(1≤k≤n),表示需要查阅的英文单词个数。其后k行,包含k个单词。 输出 查出每个单词的中文含义。每个单词的输出单独占一行。如果这个单词不存在,则输出Sorry, not in this dictionary! 输入举例 8 this 这, 这个, 今, 本 is 是 a 一(非特指) super 超级的,上等的, 特大的, 特级的, 十分的, 过分的, 极好的 simple 简单的, 简易的, 朴素的, 简朴的, 天真的, 率直的, 无经验的, 易受骗的 English 英文的, 英国人的, 英格兰的, 英国人, 英语 Chinese 中国的, 中国人的, 中国话的, 汉语的, 中国人, 中国话, 汉语, 中文 dictionary 字典, 词典, 辞典 3 English english dictionary 输出举例 英文的, 英国人的, 英格兰的, 英国人, 英语 Sorry, not in this dictionary! 字典, 词典, 辞典 我的程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char ENGLISH[51],word[51],CHINESE[201]; int times,n,j=0,i,I=0; scanf("%d",&times); while(times--) { scanf("%s%s",ENGLISH[I],CHINESE[I]); I++; } scanf("%d",&n); while(n--) { scanf("%s",word); for(i=0;i<times;i++){ if(word==ENGLISH[j]){ printf("%s",CHINESE[j]); printf("\n");} j++;} } return 0; } ------------------------------------------------------ 编程任务编号 S: 输入法菜单的循环切换 任务描述 为了方便我们的输入中文、英文,现在我们通常会在操作系统中安装多个输入法,当需要某种输入法时,通过反复按快捷键"Ctrl+Shift"在所有输入法循环切换,直到需要的需要发出现就停止。每按一次"Ctrl+Shift"快捷键,切换到当前输入法的后一个输入法。我们假设输入法在输入法栏中的排列顺序是不变的。当我们知道当前的输入法,那么就能确定切换若干次后是哪种输入法。 输入 第一行输入一个正整数n(1≤n≤100),表示已经安装了输入法的个数。其后的n行,每行表示种输入法的名称,名称长度不超过50个英文字符。 紧接下来的一行包含一个整数k(1≤k≤100),每行表示一次表示切换操作。每行有2个整数。第一个表示当前输入法的序号(从上到下,编号从1开始),第二个表示按"Ctrl+Shift"键的次数。 输出 输入每次操作后所切换到的输入法。每次操作单独占一行。 输入举例 5 Sogou Pinyin Google Pinyin QQ Pinyin Microsoft Pinyin Tsinghua Ziguan Pinyin 5 2 4 3 5 4 6 5 7 5 19 输出举例 Sogou Pinyin QQ Pinyin Tsinghua Ziguan Pinyin Google Pinyin Microsoft Pinyin 注意事项 输入数据是请注意,接收第一整数之后,下面要输入的字符串,如果没有将输入整数后的那个回车忽略,那么下次接收字符串的时候就会读入那个回车符,导致输入不正确。处理办法由多种。方法1:可以在接收第一个整数的scanf("%d ",&n);注意这里在%d后添了一个 ,这样就能将那个回车符忽略掉。接下来接收字符串的时候用gets()就是正确地接受到第一个拼音输入的名称。方法二:使用一个额外的getchar()将这个回车读走,也可以! 我的程序: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char srf[51][51]; int n,i,j,a,b,result,m; scanf("%d",&n); for(j=0;j<n;j++) { scanf("%s",srf[j]); } scanf("%d",&i); for(m=0;m<i;m++) { scanf("%d%d",&a,&b); result=(a+b)%n; printf("%s\n",srf[result-1]); } return 0; } ----------------------------------------------------------

异步方式串口 死循环读取线程 如何退出?

用VC2015写了一个SDI程序,在app类的InitInstance()函数总,开启了一个串口读指令线程(异步方式)。对于串口的操作,比如读、写、配置、清理缓存等等,全部封装在了一个DLL中。 读线程中,用一个BOOL型的开关变量制造了一个死循环,以便实时接收串口收到的数据。同时,也希望在需要终止该线程的时候,将开关量置反,结束死循环。 已知:读指令函数中,会持续监测串口事件,当检测到有数据时,即读取数据。完整数据的读取,是通过GetOverlappedResult函数实现的。 现在的问题是:要关闭进程了(点击文件菜单上的“退出”),在APP类的ExitInstance()函数中置反上述开关量,并且用PurgeComm 刷新串口(使用了PURGE_TXABORT 、PURGE_RXABORT、PURGE_TXCLEAR、PURGE_RXCLEAR四个组合值作为该函数的参数),希望产生串口事件,使待函数WaitCommEvent能够返回,进而在再次循环的时候,对开关量进行判断,因为该开关量已经置反,从而达到结束循环,退出退出线程的目的。 奇怪的是:PurgeComm函数,总是返回不成功,读线程始终结束不了。 本人为新手,不懂的太多,还望高手给与指点!非常感谢! 读线程代码如下: ``` ////worker thread.to receive instruction from control board./////// typedef CString(*FuncReceiveFromBoard)(HANDLE, char*); //int panelFlushSerialPort(HANDLE h) typedef int(*FuncFlush232)(HANDLE); FuncReceiveFromBoard ReceiveFromBoard; FuncFlush232 Flush232; HINSTANCE hDll_232DLL_RE; char* pbufcmd = nullptr; UINT ReceiveInstructionFromBoard(LPVOID pParam) { CDEMODVView *pDemoView1 = (CDEMODVView *)pParam; pbufcmd=nullptr; pbufcmd = (char *)malloc(sizeof(char)*253); //分配内存 memset(pbufcmd, 0, 253); //将分配给pcmbuf的内存初始化为0 if (theApp.communi_state == FALSE) //说明232串口没有配置好或者没有打开 return 1; else { ReceiveFromBoard = (FuncReceiveFromBoard)GetProcAddress(theApp.hDll_232com, "panelReceiveCmdFromCBoard"); //获取函数theApp.hDll_232com Flush232 = (FuncFlush232)GetProcAddress(theApp.hDll_232com, "panelFlushSerialPort"); if (!ReceiveFromBoard|| !Flush232) { AfxMessageBox(_T("获取函数失败")); return 1; } else { CString resStrFromB; //接收指令字符串 while (theApp.m_threadrunning==TRUE) { AfxMessageBox(_T("I am going")); resStrFromB = ReceiveFromBoard(theApp.hDleopen, pbufcmd); //用DLL中接收函数得到指令字符串给resStrFromB if (resStrFromB !=_T(""))// { pDemoView1->m_strInstruction2Recive = resStrFromB; pDemoView1->SendMessage(WM_INSTRUCTION_RECEIVE); //给VIEW类发送接收到字符串的消息 resStrFromB = _T(""); Flush232(theApp.hDleopen); //Sleep(4000); } } // 设置线程等待函数已经退出循环,可以结束的标志; theApp.m_threadstop = TRUE; } } free(pbufcmd); pbufcmd = nullptr; return 0; } ``` 前述封装的对串口操作的DLL中,关于读文件的部分,代码如下: ``` DWORD __stdcall ReadCmdSerialPort(HANDLE h, char * const pszBuf, DWORD bufSize, DWORD *dwSize, DWORD *dwEventMask) { DWORD error = ERROR_SUCCESS; memset(&overread, 0, sizeof(OVERLAPPED)); overread.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); //创建overlapped事件:句柄不能被继承,人工重置事件,初始状态为无信号,匿名事件 DWORD dwError; COMSTAT comstat; ClearCommError(h, &dwError, &comstat); //清除端口错误 if (!SetCommMask(h, EV_BREAK | EV_ERR | EV_RXCHAR | EV_RXFLAG)) /* Setting Event Type */ { /*printf("$\n");*/ return ::GetLastError(); } if (!WaitCommEvent(h, dwEventMask, &overread)) /* Waiting For Event to Occur */ { DWORD dwIncommingReadSize; if (GetLastError() == ERROR_IO_PENDING) { GetOverlappedResult(h, &overread, &dwIncommingReadSize, TRUE); // 等待异步操作结束后才返回到应用程序,此时,GetOverlappedResult函数与WaitForSingleObject函数等效 switch (*dwEventMask) { case EV_BREAK: _snprintf_s(pszBuf, bufSize, _TRUNCATE, "BREAK received"); /*printf("*\n");*/ return error; break; case EV_ERR: _snprintf_s(pszBuf, bufSize, _TRUNCATE, "Line status error occurred"); /*printf("&\n");*/ return error; break; case EV_RXFLAG: return error; break; case EV_RXCHAR: { char szBuf; //DWORD dwIncommingReadSize; *dwSize = 0; unsigned int ndx = 0; do { // 读取数据:指定读取的字节数为1,dwIncommingReadSize:读到的字节数;异步读取 if (ReadFile(h, &szBuf, 1, &dwIncommingReadSize, &overread) != 0) // { if (dwIncommingReadSize > 0) { *dwSize += dwIncommingReadSize; if (ndx < bufSize - 1) { pszBuf[ndx] = szBuf; ndx += dwIncommingReadSize; } } } else { break; } } while (dwIncommingReadSize > 0); ResetEvent(overread.hEvent);// 释放事件句柄 return error; break; } default: _snprintf_s(pszBuf, bufSize, _TRUNCATE, "unknown COMM event"); return error; break; } ResetEvent(overread.hEvent);// 释放事件句柄 } else { return ::GetLastError(); } } } ```

C语言在scanf("%s", );中遇到的问题

我是一个小白,在写程序(酒店管理系统)的过程中遇到了关于scanf的问题 在将结构体数组写进文件的过程中有这样几行代码: ``` printf("姓 名:"); scanf("%s",Room[i].Name); printf("\n"); printf("请输入身份证号(十八位):"); scanf("%s",Room[i].Id), printf("客 人:%s",Room[i].Name); ``` 这个时候程序可以顺利运行,但是第一次我输入的名字在程序运行完 ``` scanf("%s",Room[i].Id), ``` 之后,输出的总是空格,这个是在多次调整printf的位置之后发现的。而且写进文件里的也是空格。 *12.29.13:20更新_看了一位答主的回答之后我试着输入超出Id限定的字符数,结果在(scanf("%s",Room[i].Id)之后)输出的Room[i].Name却是输出的超出Id限定长度的部分,希望对解决问题有帮助 12.29.18:00更新_刚刚尝试了一下目前为止想到的几种办法。第一种是在接收Room[i].Name之后再接收一个新的,无意义的整型,看看是不是因为连续接收字符串出现的问题,结果还是没有得到想要的结果,这里应该就不是连续接收字符串的问题了。第二种是拿一个字符串数组代替Room[i].Name去接收字符串,再用strcpy( , )复制到Room[i].Name里,结果还是不行。虽然不明白为什么,但是我觉得所有尝试都使得我觉得:scanf("%s",Room[i].Id); 以某种方法改写了Room[i].Name的数据???虽然不明所以,但实际情况是:把 姓名 放到 身份证号 之后接收是可以正常运行,并将正确数据写到文件里面去的。程序算是能运行了,只是脑子还是一团浆糊 12.29.19:05更新_刚刚说的方法操作过后程序确实能运行,但是Room[i].Id接收的字符串的结尾会连接上Room[i].Name,似乎又是一个新问题,但似乎又和前一个问题密切相关...... 12.30.0:30更新_程序运行已经解决了,我把 Id 的长度扩大了,可以正确运行了。当时也是注释掉 Id 长度的限定后输入了很短的数,发现能正常运行,然后才这样做出的调整,这样一来发现其实问题应该是出在我在不知道具体规则的情况下把整型直接用字符串数组接收了才导致的。 从提出问题到现在基本解决也多亏大家提出自己的看法,感谢回答,包括评论一楼说到强行转成字符型的那位,不是没有看到你的评论,是我实在是不会转换.........* 我有点想不通,到这来向大家求助,希望这个问题能得到解决,谢谢了。 这里贴上完整代码: ``` #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<time.h> #define SIZE 20 typedef struct tagHotel { int Num; int Check; char Id[18]; char Name[10]; char Sex[10]; int Age; int Day; }Hotel; Hotel Room[SIZE]; void main() { FILE *fp; int a,i,e,z=0,f=0; int d,g,j,k,s; char t[SIZE][18]; int u[4]; time_t timep; struct tm *p; time (&timep); p=gmtime(&timep); fp=fopen("Hotel.dat","rb+");//---------------------------------fopen for(i=0;fread(&Room[i],sizeof(Hotel),1,fp)==1;i++);//------------------------------fread rewind(fp); for(i=0;i<SIZE;i++) { if(Room[i].Check==0) f++; } if(f==0) { printf("已经没有空房间了"); exit(0); } for(a=0;a==0;a) { for(z=0;z<=5;z++) printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("请输入入住房间数:"); scanf("%d",&a); if(f<a) { for(z=0;z<=2;z++) printf(" "); printf("房间不够,请修改房间数(按任意键返回)"); a=0; getch(); system("cls"); } } fclose(fp);//------------------------------------------------------------close for(e=0,i=0;i<SIZE&&e<a;i++) { if(Room[i].Check==0) { fp=fopen("Hotel.dat","rb+"); system("cls"); fseek(fp,i*sizeof(Hotel),0); for(z=0;z<=5;z++) printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("请输入顾客信息"); printf("\n\n"); for(z=0;z<=2;z++) printf(" "); printf("姓 名:"); scanf("%s",Room[i].Name); printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("请输入身份证号(十八位):"); printf(" ");//----------------------------------------------- printf("\n客 人:%s",Room[i].Name);//----------------------这里输出的是我的输入字符 printf("\n");//----------------------------------------------- scanf("%s",Room[i].Id); printf(" ");//------------------------------------------------------------ printf("\n客 人:%s",Room[i].Name);//-----------------------------------这里输出为空格??? printf("\n");//------------------------------------------------------------ d=strlen(Room[i].Id); if(d!=18) { printf("error\n"); return; } strcpy(t[i],Room[i].Id); for(g=0;g<4;g++) { u[g]=t[i][6+g]-48; } k=u[0]*1000+u[1]*100+u[2]*10+u[3]; j=(1900+p->tm_year); printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("年龄:%d\n",j-k); Room[i].Age=j-k; s=t[i][16]-48+1; printf("\n"); for(z=0;z<=2;z++) printf(" "); //------------------------------------用字符数组存储数字会用ASCII码转换,数字0的ASCII码值为48; if(s%2==0) { printf("性别:男"); strcpy(Room[i].Sex,"男"); } else { printf("性别:女"); strcpy(Room[i].Sex,"女"); } getch(); system("cls"); printf("\n"); for(z=0;z<=2;z++) printf(" "); system("cls"); for(z=0;z<=5;z++) printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("客 人:%s",Room[i].Name); printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("房间号为:%d",Room[i].Num); Room[i].Check=1; for(z=0;z<=5;z++) printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("请按任意键确认输入信息"); getch(); system("\n"); fwrite(&Room[i],sizeof(Hotel),1,fp);//-----------------------------------------write e++; fclose(fp);//-------------------------------------------------close } } system("cls"); printf("\n\n"); for(z=0;z<=5;z++) printf("\n"); for(z=0;z<=2;z++) printf(" "); printf("完成登记!"); } ```

一次作业C语言作业题,已经做了六道,后面的题可能与前面的有关系。

1.(示例)写一个函数,接收一个字符串作为形参,然后显示它的每个字母,每个字母单独一行。这种从开头起,每次选择一个字符,对它做一些处理,再继续,直到结束。这种处理的模式称为“遍历” traversal(char s[]){ int i; for (i=0; s[i]!=’\0’; i++) printf(“%c\n”,s[i]); } traversal(char s[]){ int i; int len; len=strlen(s); for (i=0; i<len; i++) printf(“%c\n”,s[i]); } main(){ char s[200]; gets(s); traversal(__________); } 2.写一个函数,接收一个字符串作为形参,并倒序显示它的字母,每个字母单独一行。 3.(示例)写一个函数find(char word[], char letter),判断字符letter是否位于单词word中,如果存在,返回该字符在word中的下标,如果不存在,返回-1。 int find(char word[], char letter){ int i; for (i=0; word[i]!=’\0’; i++) if (word[i]==letter) return i; return -1; } 4.修改find函数,让它接收第三个参数,表示从word的那个下标开始搜索。例如,字符串s=”blahblahblah”, 待查找字符为’a’, find(s,’a’)返回值为2,而三参数版本find(s, ‘a’, 4)返回值为6,表示从数组下标为4的位置开始搜寻字符’a’。 5.(示例)计算字母’a’在字符串中出现的次数 char word[]=”banana”; count=0; for (i=0; word[i]!=’\0’; i++) if (word[i]==’a’) count++; printf(“%d”,count); 6.将上面这段代码封装为函数count, count接收字符串和要统计的字母作为形参。提示:函数头为int count(char s[], char letter) 7.重写count函数,不直接遍历字符串,使用前面的三参数版本的find函数。查阅库函数,写出以下功能对应的库函数名称: a)将一个字符串转变为全部字母都是大写的字符串。ANSI C并没有这个库函数,我们教材上正文中有。 b)在一个字符串中搜索指定的字符c,并返回该字符的地址 c)在一个字符串中搜索另一个字符串(子串)出现的位置,返回该子串所在的位置(地址) 9.(阅读)编写一个查找子串位置的函数。 #include <stdio.h> int strindex(char s[], char t[]){ int i,j,k; for (i=0; s[i]!='\0'; i++){ j=i; k=0; while( s[j]==t[k] && t[k]!=0 ){ j++; k++; } if (t[k]=='\0'&&k>0) return i; } return -1; } main(){ char s[]="I am a boy", t[]="am"; printf("%d",strindex(s,t)); } //思考一个问题,什么情形下while循环会退出。考察以下情形的执行情况,s=”ddabdd”, t=”ab”; 又如s=”ddab”, t=”ab”; 又如s=”dda”, t=”ab”。 10.(阅读)编写一个字符串比较函数。 如果s在字典序上大于t,返回整数,等于t,返回0, 小于t,返回负数。 int strcmp(char s[], char t[]){ int i; for (i=0; s[i]==t[i]; i++) if (s[i]==’\0’) return 0; return s[i]-t[i]; } 11.扩展以上函数,使得函数在做字符串比较的时候不区分大小写。即strcmp(“banana”, “BaNaNa”)==0; 12.(改错)以下程序比较两个字符串是否互为倒序, 请多使用调试技术去发现错误。 int is_reverse(char s[], char t[]){ int i,j; if (strlen(s)!=strlen(t)) return 0; for (i=0, j=strlen(t); j>0 ; i++, j--) if (s[i]!=t[j]) return 0; return 1; }

编写程序对用户输入的一系列单词排序

假设每个单词不超过20个字符,当用户输入空单词(即敲回车键而没有录入任何单词)时停止读取,把每个单词存储在一个动态分配的字符串中,用一个指针数组来跟踪这些字符串,读完所有单词后对数组排序。 我试着编了一个没用动态分配的程序,但问题有点多,希望会的大佬帮忙改改或者帮忙写一个供我参考一下,谢谢 #include<stdio.h> #include<stdlib.h> #include<string.h> #define M 50 #define N 20 int read_line(char str[],int n) { int ch,i=0; while((ch=getchar())!='\n'){ while(ch==' ')ch=getchar(); if(i<n&&ch!='\n') str[i++]=ch; } str[i]='\0'; return i; } void quicksort(char *str[],int n) { int i=1,t; char max[N]; strcpy(max,str[0]); if(n<=1)return; for(;i<n;i++){ if(strcmp(str[i],max)){ strcpy(max,str[i]); t=i; } if(strcmp(str[i],max)==0) t=0; } strcpy(str[t],str[n-1]); strcpy(str[n-1],max); quicksort(str,n-1); } int main(void) { int i,n=0; char *str[N]; for(i=0;n<M;i++,n++) {printf("Enter word:"); if(read_line(str[n],N)==0) break; } quicksort(str,n); for(i=0;i<n;i++) printf("%s",str[i]); return 0; }

C++对文本文件读入一行 处理 并写回

处理的函数我已经写好了,就是不知道怎么对文件进行按行读写,小女请大神帮帮忙! 具体是这样的~~~~: 比如我的文本文件叫 D:/text.txt 里面有 1 2 3 2 3 4 3 4 5 我已经写好了一个处理函数,是int due(int *a) 返回值为1或-1. 我想先读入第一行,存入a数组,然后放入due函数。得到结果用b[0]接收。 然后再读取第二行,处理结果用b[1]接收。 然后再读取第三行,处理结果用b[2]接收。 最后写再写回文本,格式是这样的 1 2 3 b[0] 2 3 4 b[1] 3 4 5 b[2] 怎么实现呢~~谢谢各位!

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

玩转Python-Python3基础入门

总课时80+,提供源码和相关资料 本课程从Python零基础到纯Python项目实战。内容详细,案例丰富,覆盖了Python知识的方方面面,学完后不仅对Python知识有个系统化的了解,让你从Python小白变编程大牛! 课程包含: 1.python安装 2.变量、数据类型和运算符 3.选择结构 4.循环结构 5.函数和模块 6.文件读写 7.了解面向对象 8.异常处理

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

基于VHDL的16位ALU简易设计

基于VHDL的16位ALU简易设计,可完成基本的加减、带进位加减、或、与等运算。

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

利用Verilog实现数字秒表(基本逻辑设计分频器练习)

设置复位开关。当按下复位开关时,秒表清零并做好计时准备。在任何情况下只要按下复位开关,秒表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作。 设置启/停开关。当按下启/停开关后,将

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

计算机操作系统 第三版.pdf

计算机操作系统 第三版 本书全面介绍了计算机系统中的一个重要软件——操作系统(OS),本书是第三版,对2001年出版的修订版的各章内容均作了较多的修改,基本上能反映当前操作系统发展的现状,但章节名称基

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

SEIR课程设计源码与相关城市数据.rar

SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其中三个城市进行拟合仿真SEIR结合学报与之前博客结合所做的一些改进,选择其

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

GIS程序设计教程 基于ArcGIS Engine的C#开发实例

张丰,杜震洪,刘仁义编著.GIS程序设计教程 基于ArcGIS Engine的C#开发实例.浙江大学出版社,2012.05

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

去除异常值matlab程序

数据预处理中去除异常值的程序,matlab写成

用verilog HDL语言编写的秒表

在秒表设计中,分模块书写。用在七段数码管上显示。输入频率是1KHZ.可以显示百分秒,秒,分。如要显示小时,只需修改leds里的代码和主模块代码。改程序以通过硬件电路验证。完全正确。

[透视java——反编译、修补和逆向工程技术]源代码

源代码。

用QUARTUS设计模可变计数器器

用QUARTUS设计摸20|60的模可变计数器,文本设计

随机迷宫路径算法

基于C++写成的路径寻找,能够自动生成随机迷宫,并通过A*算法得到最短路径到达出口,可以直观地看到迷宫的构成以及路径的生成

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

MySQL数据库从入门到实战应用

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号: itxy41),按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:&nbsp; 一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。 &nbsp;

MATLAB环境下ISI信道仿真及自适应均衡器设计

本文的程序时在matlab底下,在ISI信道条件下关于自适应均衡器的仿真

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐