C语言实现计算次日星期功能运行异常 任意输入均返回Selasa如何解决
C语言星期转次日功能异常修复方案
问题根因
你遇到的所有输入都返回Selasa的问题以及功能异常主要由以下几个错误导致:
- 输入存储类型错误:你定义的
char Nama_Hari_Ini只能存储单个字符,无法存储完整的星期字符串,需要改为字符数组存储整段文本。 - 输入格式错误:
scanf使用%c仅能读取单个字符,应该用%s读取完整的字符串内容。 - 字符串比较逻辑完全错误:
- C语言不能直接用
==判断两个字符串内容相等,也不能用逗号运算符做相等判断。你写的if(Nama_Hari_Ini, "Senin")里的逗号运算符会直接返回第二个操作数"Senin"的内存地址,永远为非0真值,所以第一个条件永远成立,不管输入什么都会输出Selasa,这是你当前问题的核心原因。 - 后面的条件你还写成了
=赋值运算符,不是相等判断逻辑,完全不符合需求。字符串比较必须使用标准库函数strcmp(),两个字符串内容相等时strcmp会返回0。
- C语言不能直接用
- 缺少必要头文件:使用
printf、scanf必须引入<stdio.h>头,使用strcmp必须引入<string.h>头。 - 函数返回值设计冗余:当前函数不需要返回字符,原有返回逻辑没有实际作用。
修复后完整代码
#include <stdio.h> #include <string.h> #include <conio.h> void nama_hari_besok(char* Nama_Hari_Ini); int main(){ // 定义长度足够的字符数组存储星期字符串 char Nama_Hari_Ini[20]; printf("FUNGSI NEXTDAY\n\n"); printf("Masukkan nama hari ini= "); // 用%s读取完整字符串 scanf("%s", Nama_Hari_Ini); nama_hari_besok(Nama_Hari_Ini); getch(); return 0; } void nama_hari_besok(char* Nama_Hari_Ini){ // 使用strcmp完成字符串相等判断 if(strcmp(Nama_Hari_Ini, "Senin") == 0){ printf("Besok adalah hari Selasa\n"); } else if (strcmp(Nama_Hari_Ini, "Selasa") == 0){ printf("Besok adalah hari Rabu\n"); } else if (strcmp(Nama_Hari_Ini, "Rabu") == 0){ printf("Besok adalah hari Kamis\n"); } else if (strcmp(Nama_Hari_Ini, "Kamis") == 0){ printf("Besok adalah hari Jumat\n"); } else if (strcmp(Nama_Hari_Ini, "Jumat") == 0){ printf("Besok adalah hari Sabtu\n"); } else if (strcmp(Nama_Hari_Ini, "Sabtu") == 0){ printf("Besok adalah hari Minggu\n"); } else if (strcmp(Nama_Hari_Ini, "Minggu") == 0){ printf("Besok adalah hari Senin\n"); } else{ printf("Error\n"); } }
验证说明
修复后输入Kamis会正确输出Besok adalah hari Jumat,所有星期匹配逻辑都可以正常运行。
内容的提问来源于stack exchange,提问作者Aida Arisa
相关产品推荐
相关产品推荐

