tip:
vs2019如果无法使用scanf函数,直接在开头加上
#define _CRT_SECURE_NO_WARNINGS
使用scanf(" %c", &ch)可以避免读取到上一次输入的换行符,也可以不加空格,在scanf上一行中添加getchar()读取换行符后丢弃详见第11题
one:
scanf(" %c", &ch);
two:
getchar();
scanf("%c", &ch);
1.
#include <stdio.h>
int main(void)
{
char ch;
int ch_lines = 0;
int ch_blank = 0;
int ch_other = 0;
while (
(ch = getchar())
!= '#')
{
switch (ch) {
case '\n': ch_lines++;
break;
case ' ': ch_blank++;
break;
default: ch_other++;
break;
}
}
printf("行数:%d\n空格数:%d\n所有其他字符数:%d\n",
ch_lines, ch_blank, ch_other);
return 0;
}
2.
#include <stdio.h>
int main(void)
{
int sum = 0;
char ch;
while (
(ch = getchar())
!= '#'
)
{
printf("\"%c-%d\"", ch, ch);
sum++;
if (sum % 8 == 0)
printf("\n");
}
return 0;
}
3.
#include <stdio.h>
int main(void)
{
int digit;
int even_count = 0;
int odd_count = 0;
double even_sum = 0;
double odd_sum = 0;
scanf("%d", &digit);
while (digit != 0)
{
if (digit % 2 == 0)
{
even_count++;
even_sum += digit;
}
else
{
odd_count++;
odd_sum += digit;
}
scanf("%d", &digit);
}
printf("偶数个数:%d\n偶数平均值:%0.2f\n奇数个数:%d\n奇数平均值:%0.2f\n",
even_count, even_sum / even_count, odd_count, odd_sum / odd_count);
return 0;
4.
#include <stdio.h>
int main(void)
{
char ch;
int replace_count = 0;
while ((ch = getchar()) != '#')
{
if (ch == '.' || ch == '!')
replace_count += 1;
}
printf("进行了%d次替换", replace_count);
return 0;
}
5.
#include <stdio.h>
int main(void)
{
char ch;
int replace_count = 0;
while ((ch = getchar()) != '#')
{
switch (ch) {
case '.': replace_count++;
break;
case '!': replace_count++;
break;
default: break;
}
}
printf("进行了%d次替换", replace_count);
return 0;
}
6.
#include <stdio.h>
int main(void)
{
char ch_past, ch_now;
int ei_cont = 0;
ch_past = getchar();
while (ch_past != '#' && (ch_now = getchar()) != '#')
{
if (ch_past == 'e' && ch_now == 'i')
ei_cont++;
ch_past = ch_now;
}
printf("出现ei次数:%d&