C Primer Plus汇总 (二)错误笔记

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题
原文地址:https://www.cnblogs.com/zero5/p/2602536.html