Для небольшого числа переменных тогда ваш алгоритм должен хорошо работать. Если есть много переменных, которые можно было бы изменить, а не только два, тогда следует рассмотреть другой алгоритм. Создание этого довольно и ясно, не совсем легко в C. Если вы действительно хотите, чтобы это было быстрее, вы можете либо сделать хэш-таблицу или использовать переключатель/случай как:
int First, Second; // Note that I got rid of your leading n
char sInput[10];
printf("Which variable to change to 10?");
scanf("%s", &sInput);
// BAD - inflexible and unmaintainable
// referring to character array overflow potential, I assume
switch (sInput[0])
{
case 'F':
if (0 == strcmp("irst", sInput+1))
{
First = 10;
} else
{
// error
}
break;
case 'S':
if (0 == strcmp("econd", sInput+1))
{
Second = 10;
} else
{
// error
}
break;
default:
// error
break;
}
Если вам не нравится как это выглядит, тогда вы можете использовать макросы (#define
), чтобы сделать его менее привлекательным, но все получится. Другим вариантом, который вы могли бы использовать, было бы написать небольшую программу, которая выводит исходный код этой программы, который будет обрабатывать все повторяющиеся и утомительные части.
Другой способ сделать это, если все переменные одного типа, состоял бы в создании массива из них и вводе их индекса вместо имени, но тогда вы должны добавить код для проверки против ввода индекс вне диапазона размера массива.
Whoa, зачем вы хотите это сделать? –
Вы не можете обрабатывать строку как имя переменной. Вы можете сделать хэш-карту с такими строками как ключи и указатели переменных в качестве значений. – ypnos
В качестве незначительной заметки ваше использование 'strcmp()' неверно; он не возвращает 'bool', он возвращает' int' с '0', что означает, что строки равны. – unwind