Merge branch 'main' into emphasize-for-loop-range

This commit is contained in:
Chris Boesch 2026-02-27 19:43:31 +01:00
commit 88510735e1
9 changed files with 23 additions and 17 deletions

View File

@ -278,7 +278,8 @@ pub fn build(b: *Build) !void {
return error.UnexpectedEOF;
}
starting_exercise = try std.fmt.parseInt(u32, contents, 10);
const trimmed_contents = std.mem.trim(u8, contents, "\r\n");
starting_exercise = try std.fmt.parseInt(u32, trimmed_contents, 10);
} else |err| {
switch (err) {
std.Io.File.OpenError.FileNotFound => {

View File

@ -11,8 +11,8 @@
//
// }
//
// The "continue expression" executes every time the loop restarts
// whether the "continue" statement happens or not.
// The "continue expression" executes every single time the loop restarts,
// even when a `continue` statement skips the rest of the loop body.
//
const std = @import("std");

View File

@ -4,7 +4,7 @@
// var foo: u8 = 5; // foo is 5
// var bar: *u8 = &foo; // bar is a pointer
//
// What is a pointer? It's a reference to a value. In this example
// What is a pointer? It's a reference to a value. In this example,
// bar is a reference to the memory space that currently contains the
// value 5.
//

View File

@ -137,19 +137,20 @@ pub fn main() void {
}
// NOTE: This exercise did not originally include the function below.
// But a change after Zig 0.10.0 added the source file name to the
// type. "Narcissus" became "065_builtins2.Narcissus".
// After Zig 0.10.0, `@typeName` began prefixing the returned type name
// with the source file name. For example, "Narcissus" became
// "065_builtins2.Narcissus".
//
// To fix this, we've added this function to strip the filename from
// the front of the type name. (It returns a slice of the type name
// starting at the index + 1 of character ".")
// starting just after the ".")
//
// We'll be seeing @typeName again in Exercise 070. For now, you can
// see that it takes a Type and returns a u8 "string".
fn maximumNarcissism(myType: type) []const u8 {
const indexOf = @import("std").mem.indexOf;
const find = @import("std").mem.find;
// Turn "065_builtins2.Narcissus" into "Narcissus"
const name = @typeName(myType);
return name[indexOf(u8, name, ".").? + 1 ..];
return name[find(u8, name, ".").? + 1 ..];
}

View File

@ -11,7 +11,7 @@
// format string can be checked for errors at compile time rather
// than crashing at runtime.
//
// (The actual formatting is done by std.fmt.format() and it
// (The actual formatting is done by std.Io.Writer.print() and it
// contains a complete format string parser that runs entirely at
// compile time!)
//

View File

@ -118,6 +118,10 @@ fn printTuple(tuple: anytype) void {
// @field(foo, "x"); // returns the value at foo.x
//
// The first field should print as: "0"(bool):true
//
// Hint: Be careful! If your 'lhs' is a type, @field() looks
// for declarations. If it's a value, it looks for data.
//
print("\"{s}\"({any}):{any} ", .{
field.???,
field.???,

View File

@ -2,7 +2,7 @@
// The functionality of the standard library is becoming increasingly
// important in Zig. First of all, it is helpful to take a look at how
// the individual functions are implemented. Because this is wonderfully
// suitable as a template for your own functions. In addition these
// suitable as a template for your own functions. In addition, these
// standard functions are part of the basic configuration of Zig.
//
// This means that they are always available on every system.

View File

@ -1,5 +1,5 @@
--- exercises/065_builtins2.zig 2025-06-17 13:58:07.857258167 +0200
+++ answers/065_builtins2.zig 2025-06-17 13:56:36.630415938 +0200
--- exercises/065_builtins2.zig 2026-02-27 13:10:36
+++ answers/065_builtins2.zig 2026-02-27 13:10:52
@@ -58,7 +58,7 @@
// Oops! We cannot leave the 'me' and 'myself' fields
// undefined. Please set them here:

View File

@ -1,5 +1,5 @@
--- exercises/082_anonymous_structs3.zig 2025-03-14 16:41:17.892873287 +0200
+++ answers/082_anonymous_structs3.zig 2025-03-14 16:40:56.043829543 +0200
--- exercises/082_anonymous_structs3.zig 2026-02-27 13:05:46
+++ answers/082_anonymous_structs3.zig 2026-02-27 13:07:22
@@ -82,14 +82,14 @@
// @typeInfo(Circle).@"struct".fields
//
@ -17,9 +17,9 @@
// 3. Print the field's name, type, and value.
//
// Each 'field' in this loop is one of these:
@@ -119,9 +119,9 @@
@@ -123,9 +123,9 @@
// for declarations. If it's a value, it looks for data.
//
// The first field should print as: "0"(bool):true
print("\"{s}\"({any}):{any} ", .{
- field.???,
- field.???,