I am just learning C/C++. My problem is to determine if a character is or isn't within an array then returning an appropriate message to the user. I've only gotten this far using 'strchr' without much success. Any suggestions or help would be appreciated. Should I be using pointers instead within the function?

Thank you

Program Char Search  */


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char check(char c, char str);


main()


{   char response;
char strg[] = "Array test";
printf("%s\n", strg);


{ Printf("Enter the character  you would like to search for.");


Scanf(" %c\n", &response);
}


/*function 'check'*/
{
char check(char str[],char c);
str = strg;
c = response;
scanf("strchr: %s\n",&strg);


if strchr=c
printf("The character is %s\n",c);
}


return 0;
}

Edited 3 Years Ago by happygeek: fixed formatting

Using strchr it would look something like this.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check(char str[], int search);

int main(void)
{
  char buf[BUFSIZ];
  int ch;

  printf("Enter a string: ");
  fflush(stdout);
  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EXIT_FAILURE;

  printf("Enter a character to search for: ");
  fflush(stdout);
  if ((ch = getchar()) == EOF)
    return EXIT_FAILURE;

  if (check(buf, ch))
    printf("%c was found\n", ch);
  else
    printf("%c was not found\n", ch);

  return EXIT_SUCCESS;
}

int check(char str[], int search)
{
  return strchr(str, search) != NULL;
}

You can also do it manually if you want.

int check(char str[], int search)
{
  int i;

  for (i = 0; str[i] != '\0'; i++) {
    if (search == str[i])
      return 1;
  }

  return 0;
}

Using strchr it would look something like this.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check(char str[], int search);

int main(void)
{
  char buf[BUFSIZ];
  int ch;

  printf("Enter a string: ");
  fflush(stdout);
  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EXIT_FAILURE;

  printf("Enter a character to search for: ");
  fflush(stdout);
  if ((ch = getchar()) == EOF)
    return EXIT_FAILURE;

  if (check(buf, ch))
    printf("%c was found\n", ch);
  else
    printf("%c was not found\n", ch);

  return EXIT_SUCCESS;
}

int check(char str[], int search)
{
  return strchr(str, search) != NULL;
}

Just a friendly note:
fgets() will append a \n to the string, if you then just press enter at the character search prompt you will find the \n. The answer will be: was found

>if you then just press enter at the character search prompt you will find the \n.
That's reasonable (and expected) behavior. Let's say you want to test for exceptionally long lines:

while (fgets(buffer, sizeof buffer, stdin) != NULL && !check(buffer, '\n')) {
  /* Append buffer to a dynamic string */
}

If you don't want to find the newline, then remove it before the test, or verify the value of the search character as being neither EOF nor '\n'.

>if you then just press enter at the character search prompt you will find the \n.
That's reasonable (and expected) behavior.

No argument with that! It's the result telling me that an invisible character was found that can be confusing to the user.

This question has already been answered. Start a new discussion instead.