1、printf("%s! c is cool!\n","%s! c is cool!\n");
#include <stdio.h> #define FORMAT "%s! C is cool!\n" int main(void) { int num=10; printf(FORMAT,FORMAT); return 0; }
输出为
%s!C is cool! !C is cool!
将#define FORMAT "%s!C is cool!\n"
代入程序得到:printf(FORMAT,FORMAT);
变为:printf("%s!C is cool!\n","%s!C is cool!\n");
其中,后面的"%s!C is cool!\n"
整体作为一个字符串被带入最左边的%s,
所以输出%s!C is cool!(回车)
//其实这是最右边的那个字符串!C is cool!
//其实这是最左边的那个字符串除了%s后剩下的内容
2、printf("%d\v",n);奇怪的输出结果
#include <stdio.h> int main(void) { int m,n; scanf("%d",&n); m=n+5; while(n++<m) printf("%d\v",n); }
输出为什么是乱码?
http://tieba.baidu.com/p/1399157448
截图
输出
VS2010中
TXT文档:
WORD中
使用函数要先给变量初始化
#include <stdio.h> float sbwangyuxi(float x,float y); int main(void) { float a,b; sbwangyuxi(a,b); return 0; } float sbwangyuxi(float x,float y) { float c; while(scanf("%f,%f",&x,&y)) { c=(x-y)/(x*y); printf("%f\n",c); } }
上面这个怎么运行怎么错误,最后给主函数里的变量赋值
在主函数里加入a=0,b=0;才能成功运行
#include <stdio.h> float sbwangyuxi(float x,float y); int main(void) { float a,b; a=0,b=0; sbwangyuxi(a,b); return 0; } float sbwangyuxi(float x,float y) { float c; while(scanf("%f,%f",&x,&y)) { c=(x-y)/(x*y); printf("%f\n",c); } }
if '\"'==' "'
C PRIMER PLUS 第5版165页例题chcount.c
#include<stdio.h> #define PERIOD '.' int main(void) { int ch; int charcount=0; while((ch=getchar())!=PERIOD) { if(ch!='"'&&ch!='\'') charcount++; } printf("There are %d non-quote characters.\n",charcount); return 0; }
注意到
if(ch!='"'&&ch!='\'')
改为if(ch!='\"'&&ch!='\'')
或if(ch!='\"'&&ch!=''')
输出结果相同
疑问else break;
#include<stdio.h> #include<ctype.h> int main(void) { char ch; while(1) { ch=getchar(); if(isalpha(ch)) putchar(ch); else break; } printf("你输入的不是字母"); return 0; }
为什么只循环一次?
\n被悲剧的抓住了 然后作为祭品召唤出了else break 击败了while大魔王
http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=17322832971&z=1418062378
#include<stdio.h> #include<ctype.h> int main(void) { char ch; while(1) { ch=getchar(); if(isalpha(ch)||ch=='\n') putchar(ch); else break; } printf("你输入的不是字母"); return 0; }
//这之后犯了个毛病有问题不思考就提问,唉
小失误if并不是结束
#include<stdio.h> int main(void) { int _a,_b,_c; char ch; _a=_b=_c=0; while((ch=getchar())!='#') { if(ch==' ') _a++; if(ch=='\n') _b++; else _c++; } printf("读取的空格字符为 %d,换行字符为 %d,其它字符为 %d.",_a,_b,_c); return 0;
}
输出 为 读取的空格字符为 1,换行字符为 1,其它字符为 4.
在第2个if前加上else
变成如下后
#include<stdio.h> int main(void) { int _a,_b,_c; char ch; _a=_b=_c=0; while((ch=getchar())!='#') { if(ch==' ') _a++; else if(ch=='\n') _b++; else _c++; } printf("读取的空格字符为 %d,换行字符为 %d,其它字符为 %d.",_a,_b,_c); return 0; }
读取的空格字符为 1,换行字符为 1,其它字符为 3.
由于对if分支语句的使用失误造成在输入第一个空格时,变量ch进入第二个if里进行判断属于else
于是_c++,
例题为C PRIMER PLUS 第五版第7章课后编程练习第1题