在C中打印数组时出错

时间:2014-09-12 21:02:22

标签: c arrays printf

错误发生在以下行中:

printf("\n%s was found at word number(s): %d\n", search_for, pos);

我想打印我的整数数组(pos),但我不知道该怎么做。我通过命令行运行它,我收到此错误:

search_word.c:57:28: warning: format specifies type 'int' but the argument hastype 'int *' [-Wformat] search_for, pos);

代码:

const int MAX_STRING_LEN = 100;

void Usage(char prog_name[]);

int main(int argc, char* argv[]) {
    char search_for[MAX_STRING_LEN];
    char current_word[MAX_STRING_LEN];
    int  scanf_rv;
    int loc = 0;
    int pos[MAX_STRING_LEN] = {0};
    int word_count = 0;
    int freq = 0;

    /* Check that the user-specified word is on the command line */
    if (argc != 2) Usage(argv[0]);
    strcpy(search_for, argv[1]);

    printf("Enter the text to be searched\n");
    scanf_rv = scanf("%s", current_word);
    while ( scanf_rv != EOF && strcmp(current_word, search_for) != MAX_STRING_LEN )  {
        if (strcmp(current_word, search_for) == 0) {
            loc++;
            freq++;
            pos[loc] = word_count;
        }
        word_count++;
        scanf_rv = scanf("%s", current_word);
    }
    if (freq == 0)
        printf("\n%s was not found in the %d words of input\n",
               search_for, word_count);
    else
        printf("\n%s was found at word number(s): %d\n",
               search_for, pos);
    printf("The frequency of the word was: %d\n", freq);

    return 0;
}  /* main */

/* If user-specified word isn't on the command line,
 * print a message and quit
 */
void Usage(char prog_name[]) {
    fprintf(stderr, "usage: %s <string to search for>\n",
            prog_name);
    exit(0);
}  /* Usage */

2 个答案:

答案 0 :(得分:1)

pos是一个数组。你必须循环打印它。

else {
    printf("\n%s was found at word number(s): ",
           search_for);
    for (int index = 0; index < MAX_STRING_LEN; index++)
          printf("%d ", pos[index]);

    printf("\n");
 }

答案 1 :(得分:1)

你需要遍历数组。 C无法在单个语句中打印int数组:

else {
  int i;

  printf("\n%s was found at word number(s): ", search_for);

  for ( i = 0; i < loc; ++i ) {
    if (i > 0)
      printf(", ");
    printf("%d", pos[i]);
  }

  printf("\n");
}

在此之前,请务必在合适的时间增加loc。按原样,你将第一个元素留空。

if (strcmp(current_word, search_for) == 0) {
  pos[loc] = word_count;
  loc++;
  freq++;
}