如何在c中读取字符串后跟字符?

时间:2017-05-14 06:07:26

标签: c

#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);
}

当我执行此代码时,字符串被删除后,它将不会占用任何字符并显示结果。

3 个答案:

答案 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);

   ...

}