// 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以外的任何库
答案 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++;
}