Я изучал C++ по учебнику, и, на мой взгляд, их объяснения назначения функций setw() были плохими. Проще говоря, я не понимаю назначение этих функций, да и онлайн-объяснения мало чем помогли. Я читал, что он устанавливает ширину поля, которая будет использоваться в операциях вывода, или устанавливает параметр ширины исходящего или входящего потока ровно n, но что, черт возьми, это значит? Прежде чем вы ответите на этот вопрос, у меня есть два кода, A и B, которые лучше иллюстрируют мое замешательство.
Код А: (пример кода из учебника):
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string label;
double price;
cout << "\nPlease enter an article label: ";
cin >> setw(16);
cin >> label;
cin.sync();
cin.clear();
cout << "\nEnter the price of the article: ";
cin >> price;
cout << fixed << setprecision(2)
<< "\nArticle:"
<< "\n Label: " << label
<< "\n Price: " << price << endl;
return 0;
}
пример ввода: Пожалуйста, введите метку статьи: компьютер Введите цену статьи: 75
выход:
Артикул: Этикетка: компьютер Цена: 75.00
Код B: (почти тот же код, что и A, но с тремя закомментированными строками)
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string label;
double price;
cout << "\nPlease enter an article label: ";
//cin >> setw(16);
cin >> label;
//cin.sync();
//cin.clear();
cout << "\nEnter the price of the article: ";
cin >> price;
cout << fixed << setprecision(2)
<< "\nArticle:"
<< "\n Label: " << label
<< "\n Price: " << price << endl;
return 0;
}
пример ввода: Пожалуйста, введите метку статьи: компьютер Введите цену статьи: 75
на выходе: Артикул: Этикетка: компьютерная Цена: 75.00
В коде B я закомментировал строки setw(16), cin.sync() и cin.clear(), но не вижу никаких изменений в выводе независимо от того, закомментированы строки или нет. Итак, мой вопрос: какова цель этих строк? Что выигрывает код A, имея эти дополнительные строки, по сравнению с кодом B, в котором их нет? Есть ли какие-то входные данные, которые приведут к тому, что выходы A и B будут разными, или это разница, которую нельзя увидеть глазами? Кроме того, какова цель целого числа n в строке наборов (n). Я изменил это число на разные значения, такие как 16, 78, 100, 10000 и т. д., но это также не меняет выходные данные двух кодов. Спасибо.