#include<stdio.h>
int main() {
char *str, ch;
int count = 0, i;
printf("\nEnter a string : ");
scanf("%s", str);
printf("\nEnter the character to be searched : ");
scanf("%c", &ch);
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == ch)
count++;
}
if (count == 0)
printf("\nCharacter '%c'is not present", ch);
else
printf("\nOccurence of character '%c' : %d", ch, count);
return (0);
}
当我执行此代码时,字符串被删除后,它将不会占用任何字符并显示结果。
答案 0 :(得分:1)
您的代码可能会崩溃(在我的计算机上验证它时发生在我身上),因为您没有为str
分配空间...
您应该将char *str, ch;
更改为char *str = malloc(100), ch;
另外,将scanf("%c", &ch);
更改为scanf(" %c", &ch);
即可解决您的问题。这是因为当你输入你的字符串时,你用enter结束它,并且你的下一个scanf(%c)
消耗了这个输入,所以,你的第二个scanf()
只读取输入而不是读取你想要的字符。 scanf(" %c", &ch);
将忽略所有空格,包括先前输入的输入:-)并且将允许处理您的字符
答案 1 :(得分:0)
总是像这样写scanf来读取上一个换行符:
printf("\nEnter the character to be searched : ");
scanf(" %c", &ch);
OR
使用getchar()
printf("\nEnter the character to be searched : ");
getchar();
scanf("%c", &ch);
答案 2 :(得分:0)
定义最大长度是解决此问题的最简单方法。如果使用scanf,我会建议使用fgets,如下所示。它更加安全,因为您可以定义要读取的最大字符数。 Tutorialspoint's explanation of fgets
#define MAX_LENGTH 100
int main() {
char str[MAX_LENGTH], ch;
int count = 0;
printf("\nEnter a string : ");
fgets(str, MAX_LENGTH, stdin);
printf("\nEnter the character to be searched : ");
scanf("%c", &ch);
...
}