[Info-vax] ChatGPT solved it for me, again...

Slo slovuj at gmail.com
Fri Feb 17 09:45:29 EST 2023


Me: But fgets() is not guaranteed to return a newline character. Can you improve the code?
==========================
You're correct that fgets() may not return the newline character if the 
input buffer is filled before encountering a newline. Here's an updated 
version of the code that handles this case:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int get_wattage(char *sys) {
    return (rand() % 20) * 50 + 200;
}

int main() {
    srand(time(NULL));
    char sys1[256], sys2[256];
    int watt1, watt2;

    printf("Utility to check power supply compatibility.\n");
    printf("Enter name of system #1: ");
    if (fgets(sys1, 256, stdin) == NULL) {
        perror("fgets failed");
        exit(1);
    }
    sys1[strcspn(sys1, "\n")] = '\0';
    if (sys1[0] == '\0') {
        fprintf(stderr, "Invalid input: system name cannot be empty\n");
        exit(1);
    }
    printf("Enter name of system #2: ");
    if (fgets(sys2, 256, stdin) == NULL) {
        perror("fgets failed");
        exit(1);
    }
    sys2[strcspn(sys2, "\n")] = '\0';
    if (sys2[0] == '\0') {
        fprintf(stderr, "Invalid input: system name cannot be empty\n");
        exit(1);
    }
    watt1 = get_wattage(sys1);
    watt2 = get_wattage(sys2);

    if (watt1 == watt2) {
        printf("%s and %s can use the same power supply (%d watt)\n", sys1, sys2, watt1);
    } else {
        printf("%s and %s cannot use the same power supply as they use %d and %d watt\n", sys1, sys2, watt1, watt2);
    }
    return 0;
}
==========================




More information about the Info-vax mailing list