C программа для печати начальных букв слов из строки - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь написать C-программу для печати инициалов имени конечного пользователя с использованием строк и указателей.Я написал в комментариях, что я думаю, что функция должна сделать для иллюстрации.

Вот мой прогресс на данный момент:

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

#define MAX_BUFFER_LENGTH 31 

char userInitials(char *name)
{
    // Initialize the character array "name" and set to zero
    // Determine the length of the string using strlen
    // Print the first valid input of the string
    // Loop through the string until a space is found
    // When a space is found, print the next valid input  

    for (int i = 0; i < MAX_BUFFER_LENGTH; i++)
    {
        name[i] = 0;
    }

    int length = strlen(name);

    if (name[0] != ' ' && name[0] != '\0')
    {
        printf("%c\n", name[0]);
    }

    for (int i = 0; i < length; i++)
    {
        if (i + 1 < length && name[i + 1] != ' ')
        {
            printf("%c\n", name[i + 1]);
        }
    }
}

char main()
{
    char name[MAX_BUFFER_LENGTH] = " ";

    printf("Enter your full name and I'll print your initials: ");
    scanf_s("%[^\n]", &name, MAX_BUFFER_LENGTH);
    printf("Your name is: %c\n", name);
    printf("Your initials are: %c\n", userInitials(name));
}

Моя программа в настоящее время застряла в строке 42:

printf("Your initials are: %s\n", userInitials(name));

Visual Studio возвращает сообщение об ошибке:

(42): warning C4477: 'printf' : format string '%s' requires an argument of type 'char *', but variadic argument 1 has type 'int'.

Я также не уверен, будет ли функция работать, потому что в строке 33 есть ошибка, которую я не понимаю(Я публикую строки 26-33 для иллюстрации):

    for (int i = 0; i < length; i++)
    {
        if (i + 1 < length && name[i + 1] != ' ')
        {
            printf("%c\n", name[i + 1]);
        }
    }
}

Visual Studio возвращает сообщение об ошибке: (33): предупреждение C4716: 'userInitials': должно возвращать значение .

Я действительно изо всех сил пытаюсь заставить это работать, и мои преподаватели не очень хороши в объяснении, как решить сообщения об ошибках.Буду очень признателен за ваше время и помощь.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Инициалы должны быть либо напечатаны с userInitials(), либо возвращены на main() для печати там.Не оба.

Рассмотрите возможность объявления userInitials() с типом возврата, который может содержать более одного char, например, путем введения структуры данных, которая содержит оба инициала

struct initials {
  char first;
  char last;
};

, и корректировкиподпись функции соответственно:

struct initials userInitials(const char *name)
0 голосов
/ 09 декабря 2018

Параметр строки формата Printf %s требует указатель на символ.
Ваша функция возвращает один символ (не указатель),
по крайней мере, обещает прототип, даже если код не делает этого.
Сообщение говорит вам об этом очень четко.

Чтобы напечатать один символ, используйте %c.

Тот факт, что ваша функция userInitials() ничего не возвращает, потому что онане содержит ни одного оператора return, является причиной второй части вашего вопроса.
Алексей Левенков (в комментарии выше) предоставил полезную ссылку на контент Microsoft, обсуждающий эту ошибку, с примером функции с комментариемreturn:
https://docs.microsoft.com/en-us/previous-versions/ft5xye74(v=vs.140)

(Между прочим, здесь, в StackOverflow, важнее всего задавать вопросы только об одной проблеме).закрываюсь за то, что слишком широк.)

...