Member 13396113 Ответов: 2

Он не будет работать так, как я планирую.


Я не вижу, что я делаю неправильно. Я не могу сделать ввод для ответа Q1. Это сразу же завершает программу.
#include <stdio.h>
#include <stdlib.h>

void test();
int check_ans();
int questions(int score);


int main()
{
	int a, b, c;
	system("cls");
	
		printf("\t\tC Program Test");
		test();
		questions(a);
		return 0;
}

void test()
{
	char name[60];
		
		printf("\n\n");
		printf("\nEnter Your Name:");
		scanf("%c", &name[60]);	
}

int questions(int score)
{
	int answer[15];
	
	system("cls");
	printf("\t\tC Program Test");
	printf("\nQ1. What value is assigned to the type double variable x by the statement: x = 25.0 * 3.0 / 2.5");
	printf("\n1. 20.8");
	printf("\n2. 30.0");
	printf("\n3. 15.5");
	printf("\n4. None of the above");
	printf("\n\nQ1 answer:");
	scanf("%d", &answer[0]);

}


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

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

Kornfeld Eliyahu Peter

Используй отладчик, Люк!

2 Ответов

Рейтинг:
1

CPallini

Типы (и значения), передаваемые в scanf вызов неверен. Попробуй

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

void test();
int check_ans(int answer);
int questions();


int main()
{
  int a, s;
  system("cls");

    printf("\t\tC Program Test");
    test();
    a = questions();
    s = check_ans(a);
    printf("your score is %d\n", s);
    return 0;
}

void test()
{
  char name[60];

    printf("\n\n");
    printf("\nEnter Your Name:");
    scanf("%s", name);
}

int questions()
{
  int answer;

  system("cls");
  printf("\t\tC Program Test");
  printf("\nQ1. What value is assigned to the type double variable x by the statement: x = 25.0 * 3.0 / 2.5");
  printf("\n1. 20.8");
  printf("\n2. 30.0");
  printf("\n3. 15.5");
  printf("\n4. None of the above");
  printf("\n\nQ1 answer:");
  scanf("%d", &answer);
  return answer;
}

int check_ans(int answer)
{
  return (answer == 2 ) ? 10 : 0;
}


Member 13396113

Дело в том, что есть 15 вопросов, программа на самом деле не закончена, так что есть много вещей, которых не хватает. Вот почему у меня есть массив для ответов. Но по какой-то причине я не могу позволить пользователю хранить в нем значения. Программа просто заканчивается.

Member 13396113

Кроме того, когда я делал ваш код для массива имен, он печатал только первую сохраненную строку. Я попробовал это сделать

char name[4][40];
printf("Enter your name:");
scanf("%s %s %s %s", name[0], name[1], name[2], name[3]);
printf("Name:%s %s %s %s", name[0], name[1], name[2], name[3]);

но проблема с этим заключалась в том, что пользователь должен был каждый раз вводить 4 имени, иначе это не сработает.

Рейтинг:
0

Richard MacCutchan

Ваш test функция считывает только один символ, поэтому при следующем вызове scanf он будет читать следующие символы с клавиатуры. Вы также ничего не делаете с любым входным сигналом, который вы принимаете в name массив, так что эта функция не служит никакой цели. Кроме того, вы звоните questions с неинициализированной переменной (a) так что это будет содержать мусор. Но это на самом деле не имеет значения, так как вы никогда не используете эту переменную в questions функция.

Вы должны вернуться к своим учебным заметкам и узнать, как правильно обращаться к массивам, как их использовать scanf, как использовать параметры в вызовах функций и как возвращать информацию из функций.


Member 13396113

Дело в том, что есть 15 вопросов, программа на самом деле не закончена, так что есть много вещей, которых не хватает. Вот почему у меня есть массив для ответов. Но по какой-то причине я не могу позволить пользователю хранить в нем значения. Программа просто заканчивается. А что касается имени, я назову его позже, когда буду готовиться к сдаче анализов. Я все еще возился с переменной (а) ли поставить его на вопросы или check_ans вот почему.

Richard MacCutchan

Забудьте, сколько вопросов существует, так как каждый из них будет рассматриваться точно так же. Вам нужно захватить имя пользователя и сохранить его в переменной в вашем основном методе, иначе оно просто исчезнет. Функция вопросов должна иметь следующий дизайн:
int askquestion(char* question, char** answers)
{
the code should display the question, accept the answer(s) and then return the result.
}

Member 13396113

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

int name();
int questions(int i);


int main()
{
	int a, percentage, s;
	
	system("cls");
	
		printf("\t\tC Program Test");
		name();
		s = questions(a);
		printf("\nYOUR TEST RESULTS:");
		printf("\n\n");
		printf("\nYou got %d out of 15 score.", s);
		percentage = s/15*100;
		printf("\nThe percentage of your correct answer is %d%%", percentage);
		return 0;
}

int name()
{
	char name[100];
		
		printf("\n\n");
		printf("\nEnter Your Name:");
		gets(name);
}


int questions(int i)
{
	int score=0, user_answer[15];
	int test_answer[15]= {2, 3, 4, 1};
	
	system("cls");
	printf("\t\tC Program Test");
	printf("\n\nQ1. What value is assigned to the type double variable x by the statement: x = 25.0 * 3.0 / 2.5");
	printf("\n1. 20.8");
	printf("\n2. 30.0");
	printf("\n3. 15.5");
	printf("\n4. None of the above");
	printf("\n\nQ1 answer:");
	scanf("%d", &user_answer[0]);
	
	printf("\n\n\n");
	printf("\nQ2. In which step of the software development method are the problem inputs and outputs identified?");
	printf("\n1. Design the algorithm");
	printf("\n2. Implementing the algorithm");
	printf("\n3. Analyzing the problem");
	printf("\n4. Specifying the problem");
	printf("\n\nQ2 answer:");
	scanf("%d", &user_answer[1]);
	
	printf("\n\n\n");
	printf("\nQ3. The relational operator <= means ______");
	printf("\n1. Greater than or equal to");
	printf("\n2. Is equal to");
	printf("\n3. Is not equal to");
	printf("\n4. Less than or equal to");
	printf("\n\nQ3 answer:");
	scanf("%d", &user_answer[2]);
	
	printf("\n\n\n");
	printf("\nQ4. What value is assigned to fee by the if statement when speed is 75?");
	printf("\nif(speed > 35)\n\tfee = 20.00;\nelse if(speed > 50)\n\tfee = 40.00\nelse if(speed>75)\n\tfee = 60.00;");
	printf("\n1. 40.00");
	printf("\n2. 60.00");
	printf("\n3. 20.00");
	printf("\n4. None of the above");
	printf("\n\nQ4 answer:");
	scanf("%d", &user_answer[3]);
	
	printf("\n\n\n");
	
	for(i=0; i<4; i++)
	{
		if(user_answer[i] == test_answer[i])
		score++;	
	}
	
	return score;
}


но по какой-то причине процент всегда приходит как 0.00%