Sundaram Sharma Ответов: 2

Чем отличаются эти выходы ?


В простой программе умножения на языке Си, если мы хотим, чтобы число, введенное пользователем, было умножено, мы принимаем значения по scanf("%d%d",&a,&b); а затем программа запрашивает ввод в 1-й и 2-й строках и получает вывод в третьей строке. Но почему, если я использую scanf("%d%d\n",&a,&b);, он запрашивает вход 3 раза и дает выход 4-й строки из 1-го двух чисел. Кроме того, если scanf ("%d%d\n\n\n\n\n",&a,&b);, дает тот же результат, почему он не принимает столько чисел ввода, сколько мы добавили больше\n, он все равно принимает три входа и в 4-й строке выдает выход первых двух чисел?

я использую

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}

2-я попытка

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d\n",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}

3-я попытка

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d\n\n\n\n\n",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}


и вторая, и третья попытки имеют схожие результаты

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

1-я попытка

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}

2-я попытка

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d\n",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}

3-я попытка

#include<stdio.h>
int main()
{
int a,b,result;
printf("enter two numbers\n");
scanf("%d%d\n\n\n\n\n",&a,&b);
result=a*b;
printf("%d",result);
return 0;
}

Richard MacCutchan

Что вы ожидаете, что произойдет со всеми этими символами новой строки?

Rick York

Если вы хотите ввести два числа, попробуйте использовать этот формат для scanf : "%d %d". Это предполагает наличие двух чисел, разделенных пробелом.

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

Третий вариант-взять их из командной строки. По-моему, это даже проще.

2 Ответов

Рейтинг:
2
Рейтинг:
1

CPallini

Цитата:
то scanf("%д%д",&амп;а&усилителя;б);

Предположим, пользователь вводит
1234568

Как могут бедные scanf функция обнаружения конечной точки первого числа (и, следовательно, начала второго числа?
Я не могу.
Ты ведь не можешь, правда?


Вы должны использовать a разделитель между двумя входными числами. Пустой, как Рик-Йорке предположение сделает свое дело. Попробуйте, например:
#include <stdio.h>


int main()
{
  int a,b,result;
  printf("enter two numbers\n");
  if (scanf("%d %d",&a,&b) == 2)
  {
    result=a*b;
    printf("%d\n",result);
  }
  return 0;
}