sean871 Ответов: 2

Почему мой код иногда дает разный результат


Я пытаюсь понять, почему мой код дает мне разные результаты во время выполнения

например на первом тесте это работает
второй тест совершенно другой результат
третий тест вообще никакого результата

ниже приведен мой код :

типа char *Эми[] = {"Оливия \п Эмма \п Ава\Н МВД\Н Charloth\п Ной \Н Лиам \п Бен \н Оливер \п будет"};

printf ("профиль Эми\n");



printf("имена студентов :\n %s",*Amy,"\n");

Что я уже пробовал:

Я вообще не очень старался, потому что не совсем понимаю свою ошибку

2 Ответов

Рейтинг:
1

OriginalGriff

Вам придется быть более точным в отношении кода, который вы используете, когда возникает проблема: если я вставлю ваш код в онлайн-компилятор и попробую его:

#include <stdio.h>

int main()
    {
    printf("Hello World\n");
    char *Amy[] = {"Olivia \n Emma \n Ava\n Mia\n Charloth\n Noah \n Liam \n Ben \n Oliver \n will"};
    printf("\n Amy's Profile\n");
    printf("Student Names :\n %s",*Amy,"\n");
    return 0;
    }
Он делает то же самое каждый раз, когда я запускаю его:
Hello World                                                                                                                                                    
                                                                                                                                                               
 Amy's Profile                                                                                                                                                 
Student Names :                                                                                                                                                
 Olivia                                                                                                                                                        
 Emma                                                                                                                                                          
 Ava                                                                                                                                                           
 Mia                                                                                                                                                           
 Charloth                                                                                                                                                      
 Noah                                                                                                                                                          
 Liam                                                                                                                                                          
 Ben                                                                                                                                                           
 Oliver                                                                                                                                                        
 will
Чего я и ожидал.
Однако я бы предложил одно улучшение вашего кода:
printf("Student Names :\n %s", Amy[0], "\n");
Обычно это лучший способ доступа к массиву, чем использование указателя. Однако это не будет иметь никакого значения для вывода вашего кода.


CPallini

5. И 'Привет Мир' бесплатно! :-)

OriginalGriff

Черт! Как вы думаете, я должен был взять с него деньги за этот оригинальный код? :смеяться:

Рейтинг:
0

CPallini

Цитата:
типа char *Эми[] = {"Оливия \п Эмма \п Ава\Н МВД\Н Charloth\п Ной \Н Лиам \п Бен \н Оливер \п будет"};
Приведенная выше строка определяет массив указателей (на символы), имеющих только один элемент.
Хотя технически это не ошибка, это, вероятно, не то, что вы намеревались.

Цитата:
printf("имена студентов :\n %s",*Amy,"\n");
Приведенная выше строка неверна (см. е документация[^]): ваша строка формата указывает только один аргумент (%s), но вы предоставляете два (amy[0] и "\n"). Приличный компилятор выдаст предупреждение.

Я бы написал это так:
#include <stdio.h>

int main()
{
  const char *Amy = "Olivia \n Emma \n Ava\n Mia\n Charloth\n Noah \n Liam \n Ben \n Oliver \n will";
  printf("\n Amy's Profile\n");
  printf("Student Names :\n %s\n", Amy);
  return 0;
}


Klaus-Werner Konrad

"Приличный компилятор выдаст предупреждение"

- Нет !!! printf-это функция с переменным количеством аргументов, поэтому компилятор никогда не может знать, сколько аргументов являются правильными ...

CPallini

$ ССЗ фу.с
foo.c: в функции ‘main’:
фу.с:10:12: предупреждение: слишком много аргументов для формата [-Wformat-дополнительные аргументы]
printf("имена студентов :\n %s",*Amy,"\n");
^~~~~~~~~~~~~~~~~~~~~~