C语言一些基础知识

时间:2024-03-04 07:17:22

#include<bits/stdc++.h>

#include<bits/stdc++.h>包含C++的所有头文件,看见别人用这个函数,然后就能直接用vector,set,string那些函数了,摸不着头脑,感觉特神奇就百度了一下,才发现这个是C++版本升级,然后文件自带的,方便了程序员吧。不然每次都得敲那模板老长……




#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a+b<<endl;
    return 0;
}
#include<bits/stdc++.h>这个头文件包含以下等等C++中包含的所有头文件:

#include <iostream> 
#include <cstdio> 
#include <fstream> 
#include <algorithm> 
#include <cmath> 
#include <deque> 
#include <vector> 
#include <queue> 
#include <string> 
#include <cstring> 
#include <map> 
#include <stack> 
#include <set> 
等等……
不过在国内oj中,poj,hdu 不支持这个函数,这几个oj的编译器问题,其他国外的oj,还有*的oj都支持,CF,Topcoder也都支持。

输入输出(printf scanf)

printf

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)
printf 函数的一般形式为:
int printf(const char *format,[argument]);
格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

用法

以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)
#include<stdio.h>
int main()
{
int i,j;
scanf("%d,%d",&i,&j);
printf("i=%d;j=%d",i,j);
return0;
}
以下程序用于输出“百度百科”
#include<stdio.h>
int main()
{
printf("百度百科");
return0;
}

通常意义上format的格式如下:
%[flags][width][.prec][F|N|h|l]type

Hap环境变量

下列环境变量影响 printf 命令的执行:
LANG 在 LC_ALL 和相应的环境变量(以 LC_ 开头)没有指定语言环境时,确定语言环境编目使用的语言环境。
LC_ALL 确定用于覆盖由 LANG 或其它任何 LC_环境变量设置的任何语言环境编目值的语言环境。
LC_CTYPE 确定把文本字节数据顺序解释为字符的语言环境;例如,单一字节对应多字节字符的参数。
LC_MESSAGES 确定写消息使用的语言。
LC_NUMERIC 确定数字格式编排的语言环境。此环境变量影响使用 e、E、f、g 和 G 转换字符编写的数字的格式。

Unix命令行程序和内建指令(更多)

文件系统
 cat  cd  chmod  chown
 chgrp  cksum  cmp  cp
 du  df  fsck  fuser
 ln  ls  lsattr  lsof
 mkdir  mount  mv  pwd
 rm  rmdir  split  touch
 umask      
 
程序
 at  bg  chroot  cron
 exit  fg  jobs  kill
 killall  nice  pgrep  pidof
 pkill  ps  pstree  sleep
 time  top  wait  
 
使用环境
 env  finger  id  logname
 mesg  passwd  su  sudo
 uptime  w  wall  who
 whoami  write    
 
文字编辑
 awk  comm  cut  ed
 ex  fmt  head  iconv
 join  less  more  paste
 sed  sort  strings  talk
 tac  tail  tr  uniq
 vi  wc  xargs  
 
Shell 程序
 alias  basename  dirname  echo
 expr  false  printf  test
 true  unset    
 
网络
 inetd  netstat  ping  rlogin
 netcat  traceroute    
 
搜索
 find  grep  locate  whereis
 which      
 
杂项
 apropos  banner  bc  cal
 clear  date  dd  file
 help  info  size  lp
 man  history  tee  tput
 type  yes  uname  whatis

scanf

printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,
即按用户指定的格式从键盘上把数据输入到指定的变量之中。
函数原型
int scanf(const char*format,...);
scanf()是从标准输入输出流stdio.h (标准输入设备),一般是键盘中读内容的通用子程序
可以说明的格式读入多个字符,保存在对应地址的变量中。
其调用形式为: scanf("<格式说明字符串>",<变量地址>);变量地址要求有效,
并且与格式说明的次序一致。
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
如:scanf("%d%d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF
且返回值为int型.
注意问题
(1) 对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符
(2) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
(3) scanf()函数中没有精度控制。
         如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
(4) scanf中要求给出变量地址,如给出变量名则会出错
          如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。
(5) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
  C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
(6) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
例如:scanf("%c%c%c",&a,&b,&c);
输入为: d e f
 则把\'d\'赋予a, \' (空格)\'赋予b,\'e\'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把\' \'作为下一个字符送给b。
只有当输入为:def (中间无空格)时,才能把\'d\'赋于a,\'e\'赋予b,\'f\'赋予c。 如果在格式控制中加入空格作为间隔,
如:scanf("%c %c %c",&a,&b,&c);
则输入时各数据之间可加空格。
          scanf标准输入的一些问题:
  1. 如何让scanf()函数正确接受有空格的字符串?如: I love you!
  2. 键盘缓冲区残余信息问题
  3. 输入类型与格式化字符串不匹配导致stdin流的阻塞。
  4. 如何处理scanf()函数误输入造成程序死锁或出错
补充
fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)