关于while(std::cin>>value)

#include <iostream>
int main()
{
	int sum=0,value;
	while(std::cin>>value)
		sum+=value;
	std::cout<<"Sum is:"<<sum<<std::endl;
	return 0;
}
注意:如果流是有效的,那么测试成功,遇到文件结束符或者遇到无效输入时,如读取了一个不是整数的值,则istream对象时无效的,处于无效状态的istream对象将导致条件失败!
#include <iostream> #include <string> #include <vector> #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <ctime> #include <iomanip> #include <sstream> #pragma comment(lib, "ws2_32.lib") #define BUFF_LEN 512 std::string msg = "testmsg"; std::string ip = "127.0.0.1"; int packet_count = 1; int interval = 1; int port = 9990; int nport = 1; //状态 bool iscontinue = true; bool isreset = true; void udp_msg_sender(SOCKET fd, sockaddr_in dst, int t, const std::string& ip) { for (int count = 0; count < t; count++) { // 获取当前时间并格式化 SYSTEMTIME st; GetLocalTime(&st); //格式化时间时间字符串 不足自动补零 std::ostringstream oss; oss << std::setfill('0') << std::setw(4) << st.wYear << "-" << std::setw(2) << st.wMonth << "-" << std::setw(2) << st.wDay << " " << std::setw(2) << st.wHour << ":" << std::setw(2) << st.wMinute << ":" << std::setw(2) << st.wSecond; std::cout << oss.str() << " send msg" << count + 1 << ":" << msg << std::endl; // 发送UDP数据包 sendto(fd, msg.c_str(), static_cast<int>(msg.size()) + 1, 0, (sockaddr*)&dst, sizeof(dst)); Sleep(interval * 1000); // Windows Sleep使用毫秒 } } bool parse(bool isreset) { if (isreset) { std::string value; std::cout << "\n发送信息:" << std::endl; std::cin >> value; msg = value; std::cout << "\n发包数量:" << std::endl; std::cin >> value; packet_count = std::stoi(value); std::cout << "\n发送间隔(s):" << std::endl; std::cin >> value; interval = std::stoi(value); std::cout << "\n目的ip(点分十进制):" << std::endl; std::cin >> value; ip = value; std::cout << "\n端口号:" << std::endl; std::cin >> value; port = std::stoi(value); } std::cout << "\nparse parameter finish:" << std::endl; std::cout << "msg: " << msg << std::endl; std::cout << "time: " << packet_count << std::endl; std::cout << "interval: " << interval << std::endl; std::cout << "port start: " << port << std::endl; std::cout << "port number: " << nport << std::endl; std::cout << "ipaddr: " << ip << std::endl << std::endl; return true; } bool resolve_ip(const std::string& ip_str, in_addr& out_addr) { // 尝试直接解析为IPv4地址 if (inet_pton(AF_INET, ip_str.c_str(), &out_addr) == 1) { return true; } return false; } int main(int argc, char* argv[]) { // 初始化Winsock 这是Windows平台网络编程必须的初始化步骤。 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { std::cerr << "WSAStartup failed: " << WSAGetLastError() << std::endl; return 1; } while (iscontinue) { std::string re; std::cout << "是否重新配置(Y/N)" << std::endl; std::cin >> re; isreset = re == "Y" ? true : false; if (!parse(isreset)) { WSACleanup(); return 1; } SOCKET client_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (client_fd == INVALID_SOCKET) { std::cerr << "create socket fail: " << WSAGetLastError() << std::endl; WSACleanup(); return 1; } // 设置目标地址结构 sockaddr_in ser_addr; memset(&ser_addr, 0, sizeof(ser_addr)); ser_addr.sin_family = AF_INET; in_addr target_ip; if (!resolve_ip(ip, target_ip)) { std::cerr << "Failed to resolve IP address: " << ip << std::endl; closesocket(client_fd); WSACleanup(); return 1; } ser_addr.sin_addr = target_ip; for (int i = 0; i < nport; i++) { int destport = port + i; ser_addr.sin_port = htons(static_cast<u_short>(destport)); std::cout << "send udp packet to " << ip << ":" << destport << std::endl; udp_msg_sender(client_fd, ser_addr, packet_count, ip); std::cout << std::endl; } std::cout << "是否继续发送(Y/N)" << std::endl; std::cin >> re; if (re != "Y") { closesocket(client_fd); WSACleanup(); iscontinue = false; } } return 0; }这段用C++写的代码运行在Windows环境下,可以向指定IP端口发送UDP包,请添加代码让其也可以发送TCP包
06-12
#include <iostream> #include <vector> #include <algorithm> #include <stdexcept> #include <map> #include <limits> // 使用贪心算法找零 std::map<int, int> coinChange(const std::vector<int>& coins, int amount) { // 按面额降序排序 std::vector<int> sortedCoins = coins; std::sort(sortedCoins.begin(), sortedCoins.end(), std::greater<int>()); std::map<int, int> result; int remaining = amount; for (int coin : sortedCoins) { if (remaining <= 0) break; // 计算当前面额最大可用数量 int count = remaining / coin; if (count > 0) { result[coin] = count; remaining -= count * coin; } } } // 清除输入缓冲区的错误状态和残留字符 void clearInputBuffer() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } // 安全的整数输入函数 int getSafeIntInput(const std::string& prompt) { int value; while (true) { std::cout << prompt; if (std::cin >> value) { return value; } else { std::cout << "输入无效,请输入整数!\n"; clearInputBuffer(); } } } int main() { // 固定面额设置 const std::vector<int> coins = { 1, 5, 10, 20, 50, 100 }; try { std::cout << "=== 零钱兑换系统 ===" << std::endl; std::cout << "可用面额:"; for (size_t i = 0; i < coins.size(); ++i) { std::cout << coins[i] << "元"; if (i < coins.size() - 1) std::cout << ", "; } std::cout << std::endl; // 输入金额 int amount = getSafeIntInput("请输入需要找零的金额(单位:元):"); // 执行找零操作 auto change = coinChange(coins, amount); // 输出结果 std::cout << "\n找零结果:" << std::endl; int totalNotes = 0; for (const auto& entry : change) { std::cout << entry.first << "元钞票: " << entry.second << "张" << std::endl; totalNotes += entry.second; } std::cout << "总共需要: " << totalNotes << "张钞票" << std::endl; } catch (const std::exception& e) { std::cerr << "\n错误: " << e.what() << std::endl; return 1; // 返回错误代码 } return 0; 解释上述代码
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值