文章标题
来源:互联网 发布:smap关系 知乎 编辑:程序博客网 时间:2024/06/05 17:10
#include <stdio.h>#include <stdlib.h>#include <string.h>/* 作者注: 语法篇的重点是学习语法,至于scanf/gets这些函数并不重要;将来再学完语法之后, 你不太可能再需要这些函数了,因为真正的项目一般都不是控制台这样的黑窗口程序。 所以在这里提供了一些函数,大家直接调用就行了,只是为了方便练习。 注:VS2013,2015下面把gets换成gets_s就行了,详情看《常见问题汇总》 注:这6个函数采用"先声明后定义"的方式,函数体在main()的后面呢,相关语法请参考 视频8.6讲的内容。*/// 去除头尾的空白字符, 返回一个C风格字符串指针// 注: 不创建新的buffer,不作内存拷贝和移动// 如果长空为零,则返回NULLchar* AfTrim(char* src);// 输入一个字符串, 存到output里(左右的空白字符会被自动去掉)char* AfGetString(char* output);// 获取一个整数, 如果输入为空则返回默认值defValueint AfGetInt(int defValue);// 获取一个小数, 如果输入为空则返回默认值defValuedouble AfGetDouble(double defValue);// 获取单字符输入, 如果输入为空则返回默认值defValuechar AfGetChar(char defValue);// 获取bool型输入, 如果输入为空则返回默认值defValuebool AfGetBool(bool defValue);struct User{ int id; char name[128]; char phone[32]; bool vip;};int main(){ User u; u.id = AfGetInt(0); AfGetString(u.name); AfGetString(u.phone); u.vip = AfGetBool(true); system("pause"); // 加上这么一行, 则需要按回车后才能退出 return 0;}/* 从控制台输入各种类型的数据示例 语法篇18章后可以完全不用scanf,直接使用这一套API*/// 去除头尾的空白字符, 返回一个C风格字符串指针// 注: 不创建新的buffer,不作内存拷贝和移动// 如果长空为零,则返回NULLchar* AfTrim(char* src){ char* pStart = NULL; char* pEnd = NULL; char* p; // 从第1个字符开始扫描 for(p=src ; *p != '\0'; p ++ ) { if(*p == ' ' || *p == '\t' || *p== '\n') ; else { pStart = p; // 开头 break; } } // 全部为空白字符 if(pStart == NULL) { *src = '\0'; return src ; } // 继续扫描 bool nonBlank = true; for( ; ; p ++ ) { if(*p == ' ' || *p == '\t' || *p== '\n' ||*p=='\0') { if(nonBlank) { pEnd = p; nonBlank = false; } if(*p == '\0') break; } else { nonBlank = true; } } // 截断末尾的空白 *pEnd = '\0'; // 有效长度为0,返回空指针 if(pEnd == pStart) return NULL; return pStart; }// 输入一个字符串, 返回接收到的长度char* AfGetString(char* output){ char buf[512]; gets(buf); char* str = AfTrim(buf); if(str == NULL) return NULL; else { strcpy(output, str); return output; }}// 获取一个整数int AfGetInt(int defValue){ char buf[128]; char* str = AfGetString(buf); if(str == NULL) return defValue; else return atoi(str);}// 获取一个小数double AfGetDouble(double defValue){ char buf[128]; char* str = AfGetString(buf); if(str == NULL) return defValue; else return atof(str);}// 获取单字符输入char AfGetChar(char defValue){ char buf[128]; char* str = AfGetString(buf); if(str == NULL) return defValue; else return str[0];}// 获取bool型输入// 获取单字符输入bool AfGetBool(bool defValue){ char buf[128]; char* str = AfGetString(buf); if(str == NULL) return defValue; else { if(strcmp(str, "YES") == 0 || strcmp(str, "yes") == 0 || strcmp(str, "1") == 0 || strcmp(str, "true") == 0 || strcmp(str, "TRUE") == 0) return true; return false; }}
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- laravel资源加载路径设置
- c++小结
- 前端面试题小集
- iOS POST上传文件~笔记
- android 高级之旅 (八) 极光推送 JPush 的基本使用
- 文章标题
- Git 基本使用
- js基础
- CentOS7 安装迷你版后,没有ifconfig命令的解决办法
- mybatis中#{}与${}的区别
- Java与算法(13)
- 利用委托在子窗体设置父窗体控件
- windows使用gRPC框架的详细说明
- 简述正则表达式的语法规则(一)