C语言怎么处理scanf();后有换行符的问题?
入门题目:字符串分类统计题目描述:输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
每次一回车,比预想的多一字符!
/********************************** 换行符、制表符。。。归为‘其它字符’ **********************************/ #include <stdio.h> #include <stdlib.h> int main() { int lettes = 0; int numbers = 0; int spaces = 0; int symbols = 0; char str = '\0'; do{ scanf("%c", &str); if( str >= 'a' && str <= 'z' ) { lettes++; } else if( str >= 'A' && str <= 'Z') { lettes++; } else if( str >= '0' && str <= '9' ) { numbers++; } else if( str == ' ') { spaces++; } else { symbols++; } }while( str != '\n' ); printf("字母%d个,数字%d个,空格%d个,其它字符%d个\n", lettes, numbers, spaces, symbols); system("pause"); return 0; }
[此贴子已经被作者于2022-11-10 08:43编辑过]
#include <stdio.h> int main( void ) { char line[201]; scanf( "%200[^\n]", line ); size_t lettes = 0; size_t numbers = 0; size_t spaces = 0; size_t symbols = 0; for( const char* p=line; *p; ++p ) { if( (*p>='A' && *p<='Z') || (*p>='a' && *p<='z') ) ++lettes; else if( *p>='0' && *p<='9' ) ++numbers; else if( *p == ' ' ) // 从题目中看不出它对“空格”的定义是什么,我就按你的代码写 ++spaces; // 取名叫“spaces”真不好,因为C语言中的spaces包括 " \t\n\v\f\r" 这6个字符 else ++symbols; } printf( "%zu %zu %zu %zu\n", lettes, numbers, spaces, symbols ); }
#include <stdio.h> int main( void ) { size_t lettes = 0; size_t numbers = 0; size_t spaces = 0; size_t symbols = 0; for( int ch; ch=getchar(), ch!=EOF && ch!='\n'; ) { if( (ch>='A' && ch<='Z') || (ch>='a' && ch<='z') ) ++lettes; else if( ch>='0' && ch<='9' ) ++numbers; else if( ch == ' ' ) // 从题目中看不出它对“空格”的定义是什么,我就按你的代码写 ++spaces; // 取名叫“spaces”真不好,因为C语言中的spaces包括 " \t\n\v\f\r" 这6个字符 else ++symbols; } printf( "%zu %zu %zu %zu\n", lettes, numbers, spaces, symbols ); }