繁体   English   中英

程序计算空白,制表符和换行符

[英]Program to count blanks, tabs, and newlines

我写的程序如下

#include<stdio.h>

int main() {

double nl=0,nb=0,nt=0;
int c;

while((c=getchar())!=EOF) {
        if(c == '\n') nl++;
        if(c == ' ') nb++;
        if(c == '\t') nt++;
}

printf("lines = %f, blanks= %f, tabs=%f ",nl,nb,nt);
return 0;

}

输入:

h   a i
i   am krishna

输出:

lines = 1.000000, blanks= 8.000000, tabs=0.000000 

在输入中,我给出了两个选项卡(一个在h第一行,另一个在i第二行),每个选项卡通常包含3个空格。 如果我们观察到输出,则显示1个新行(正确),8个空格(不正确,必须为2)和0个制表符(false,必须为2)。

哪里出了问题? 为什么制表符算作3个空格?

您的代码可以完美运行,但是在线编译器无法正常运行,因为它使用空格而不是制表符。 这是带有少量mod的代码。

#include<stdio.h>

int main() {
/*Double has no sense*/
int nl=0,nb=0,nt=0;
int c;
while((c=getchar())!=EOF) {
        if(c == '\n') nl++;
        if(c == '\t') nt++;
        if(c == ' ') nb++;      
}

printf("lines = %d, blanks= %d, tabs=%d ",nl,nb,nt);
return 0;
}

提供此输入:

a   b c /*New line here*/
d   e f /*No new line*/

输出正确:

lines = 1, blanks= 2, tabs=2

以下建议的代码:

  1. 干净地编译
  2. 使用switch()语句而不是if()语句的字符串(这意味着整数仅被评估一次)
  3. 正确使用double字面量而不是整数字面量
  4. 遵循公理: 每行仅一个语句,每个语句(最多)一个变量声明。

现在的代码:

#include<stdio.h>

int main( void )
{

    double nl=0.0;
    double nb=0.0;
    double nt=0.0;
    int c;

    while((c=getchar())!=EOF)
    {
        switch(c)
        {
            case '\n':
               nl += 1.0;
               break;

            case ' ':
               nb += 1.0;
               break;

            case '\t':
               nt += 1.0;
               break;

            default:
               break;
        }
    }

    printf("lines = %f, blanks= %f, tabs=%f ",nl,nb,nt);
    return 0;
}

具有描述的输入:(出于说明目的, <tab>实际上是一个制表符)

h<tab>a i
i<tab>am krishna

这是输出:

lines = 2.000000, blanks= 2.000000, tabs=2.000000 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM