我正在尝试解决hackerrank中的一个问题:
编写一个程序以存储5位学生的详细信息。-3个科目的卷号,名称和分数
您可以提供以下详细信息:
var s1 = Student(rollNo:1,name:“ Alan”,mark1:1.45,mark2:2.50,mark3:3.43)
var s2 = Student(rollNo:1,name:“ Ben”,mark1:1.448,mark2:2.50,mark3:3.32)...您需要获取学生s1的卷号。
我创建了一个带有rollNo,名称和mark1,mark2,mark3的结构,然后从STDIN中读取。但是,当我尝试写入结果时,会引发该错误。有人可以解释我在做什么错吗?
struct Student {
var rollNo: Int
var name: String
var mark1: Double
var mark2: Double
var mark3: Double
}
let fileName = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: fileName, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: fileName)!
guard let roll = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let n = readLine() else { fatalError("Bad input") }
guard let m1 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let m2 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let m3 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
let result = Student(rollNo: roll, name: n, mark1: m1, mark2: m2, mark3: m3)
fileHandle.write(String(result).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
答案 0 :(得分:0)
您看到此错误,因为您试图将对象转换为字符串。
String()不迅速支持该功能,但是您可以实现 CustomStringConvertable 协议并获得相似的结果
更改模型,使其看起来像这样:
struct Student: CustomStringConvertible {
var rollNo: Int
var name: String
var mark1: Double
var mark2: Double
var mark3: Double
///Change this to how you want your output to be formatted.
var description: String { return "name: \(name) rollNumber: \(rollNo) mark1: \(mark1) mark2: \(mark2) mark3: \(mark3)"}
}
现在可以将此学生对象写入文件,您可以执行以下操作:
fileHandle.write(result.description.data(using: .utf8)!)