scanf使用说明
写题的时候c和c++最大的区别就是输入输出了
首先说明其实一般的程序都是c++ 人家那种硬件代码才是纯c的 我又不用往板子上烧 不用写那么麻烦
贴一段硬件的纯c代码看一看 其实区别也不是很大 2333
1 void ComputePowerSpectrum(int32_t* frame, 2 int64_t* power_spectrum){ 3 int32_t* buffer = (int32_t*)malloc(sizeof(int32_t) * FRAME_LEN_PADDED); 4 5 memset(buffer, 0, sizeof(int32_t) * FRAME_LEN_PADDED); 6 fixed_point_fft(frame, buffer, FRAME_LEN_PADDED); 7 8 int64_t first_energy = FixedMulInt64(frame[0], frame[0])>>1; 9 int64_t last_energy = FixedMulInt64(buffer[1], buffer[1])>>1; 10 uint16_t half_dim = FRAME_LEN_PADDED/2; 11 12 power_spectrum[0] = first_energy; 13 power_spectrum[half_dim] = last_energy; 14 for (i = 1; i < half_dim; i++){ 15 int32_t real = frame[i], img = buffer[i]; 16 power_spectrum[i] = FixedMulInt64(real, real)>>1; 17 power_spectrum[i] += FixedMulInt64(img, img)>>1; 18 assert(power_spectrum >= 0); 19 } 20 free(buffer); 21 }
然后就主要讲一下scanf的使用吧
竞赛里一般都是用scanf 虽然不太好打(相对于cin) 但是速度比较快
1 #include<stdio.h> 2 3 int main() 4 { 5 int n; 6 while(~scanf("%d",&n)) 7 { 8 9 } 10 return 0; 11 }/* 12 13 14 15 */
scanf printf都要接受两个参数
一个是后面的要输出的参数
要记得输入的时候参数要加上取地址符& 输出的时候不用取地址符&
另一个是前面的字符串 也就是scanf中f对应的format的意思 格式化字符串
%d %f %c %s这样的符号通俗的称为占位符
常用的占位符大概有这些
1 int -> %d 2 unsigned int -> %u 3 long long -> %lld 4 unsigned long long -> %llu 5 double -> %lf 6 char -> %c 7 char[] -> %s
值得一提的是
目前普遍认为double输入是用%lf 输出用%f
但是看了c++官网发现好像没有%lf这种用法了(小声bb
但是在目前的c++11里还是普遍认为
再值得一提的是 普遍认为输入字符串是不用取地址的
但实际上加不加都可以
1 char str[maxn]; 2 scanf("%s",&str); 3 scanf("%s",str);
关于~scanf("xxxx",&xx)的返回值
它的返回值就是输入的参数的个数
当输入到EOF的时候会返回-1(11111111) 按位取反之后就是0(00000000)了
就可以跳出循环了