Zeeking99 Ответов: 1

Не в состоянии решить проблему кода.


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

Задача состоит в том, чтобы объявить 3 переменные: одно целое число, одно двойное и строку. Нам предоставляется 3 переменные, которые мы должны добавить объявленные переменные, которые будут инициализированы путем ввода входных данных. И мы должны напечатать их на экране.

Это мой код.:

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

int main() {
    int i = 4;
    double d = 4.0;
    char s[] = "HackerRank ";

    int number;
    double decimal;
    char name[50];

    scanf("%d",&number);
    scanf("%lf",&decimal);
    scanf("%*[\n] %[^\n]",name);
 	
 	printf("\n%d\n%.01lf\n%s%s\n",number+i,decimal+d,s,name);

    return 0;
}


Я получаю тот же результат, что и требуется, но система его не принимает. Затем я нашел редакционную статью, которая дала решение

Это решение при условии :

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

int main() {
    int i = 4;
    double d = 4.0;
    char s[] = "HackerRank ";

int i2;
double d2;
char s2[100]; // this is not scalable for input of unknown size

// Read inputs from stdin
scanf("%d", &i2);
scanf("%lf", &d2);
scanf("%*[\n] %[^\n]", s2); 

// Print outputs to stdout
printf("%d\n", i + i2);
printf("%.01lf\n", d + d2);
printf("%s%s", s, s2);

    return 0;
}


Я был бы признателен, если бы кто-нибудь рассказал мне о цели %*[\n] в scanf.

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

Я попытался сопоставить их, но не смог найти никакого несоответствия. Я впервые объявленной переменной запятой в формате с плавающей точкой. Позже я изменил его на двойной, но проблема остается.

KarstenK

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

1 Ответов

Рейтинг:
10

OriginalGriff

Цитата:
Я был бы признателен, если бы кто-нибудь рассказал мне о цели %*[\n] в scanf.

Видеть здесь: Библиотечная функция C - scanf()[^] там написано::
Цитата:
*

Это необязательная начальная звездочка указывает на то, что данные должны быть считаны из потока, но проигнорированы, то есть они не хранятся в соответствующем аргументе.

И выход из этих двух частей кода будет немного отличаться: ваш начинается и заканчивается новой строкой, решение-нет. Добавьте это к другому размеру входной памяти:
char name[50];

char s2[100];
И их может быть достаточно, чтобы вы потерпели неудачу.


Zeeking99

Да, вы правы, вся эта суета была только из - за символа новой строки. Какая же я дура, что совершила такую глупую ошибку.

OriginalGriff

Легко ошибиться! Не кори себя за это ... мы все совершаем ошибки.

Zeeking99

Важно то, что мы должны учиться у них.

OriginalGriff

О да - вы учитесь гораздо большему на ошибках, чем на успехах.
В Основном "Ой! Это больно!" но вот вы идете... :D

Zeeking99

Определенно. :Д