程序来计算字符串中的空白,制表符和换行符的数量

时间:2019-01-02 05:50:50

标签: c

// Program to calculate number of blanks, tabs and newlines in a string
#include <stdio.h>

int main(void) {
    int blanks,tabs,newlines;
    char string[30];
    blanks=0;
    tabs=0;
    newlines=0;
    printf("Enter some text less than size 30:\t");
    scanf("%s", &string);
    for(int i=0; i<30; i++){
       if(string[i]=='')
         blanks++;
       if(string[i]=='\t')
         tabs++;
       if(string[i]=='\n')
         newlines++;
    }
       printf("No of blanks: %d \n No of Tabs: %d \n No of Newlines: %d", blanks,tabs,newlines);
   return 0;
 }

这不是getchar()!= EOF版本,因此请勿将其标记为重复。也不能使用除stdio.h以外的任何库

2 个答案:

答案 0 :(得分:1)

scanf在出现空格,制表符或换行符时停止读取。

  

匹配一系列非空格字符;下一个指针   必须是足以容纳字符的字符数组的指针   输入序列和终止的空字节('\ 0'),已添加   自动。 输入字符串停在空格或最大值处   字段宽度,以先到者为准。

因此,您输入时不会读取整个字符串。

尝试如下使用fgets

    fgets(string, sizeof(string), stdin); 

答案 1 :(得分:1)

  

计算字符串中的空格,制表符和换行符的数量

OP的代码在进行字符串处理时几乎可以,但是无法根据需要读取用户输入。

scanf("%s"将不保存空格。使用fgets()@anoopknr

// scanf("%s", &string);
fgets(string, sizeof string, stdin);

// Process the string until a null character is found.
// for(int i=0; i<30; i++){
for(int i=0; string[i]; i++){
   // OP's code should fail to compile as coded.
   // if(string[i]=='')
   if(string[i]==' ')
     blanks++;
   if(string[i]=='\t')
     tabs++;
   if(string[i]=='\n')
     newlines++;
}