鱼C论坛

 找回密码
 立即注册
查看: 1225|回复: 4

为什么此函数无法正常输出

[复制链接]
发表于 2023-11-29 08:58:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main(){
    int a,b,n;
        int s1=0,s2=0;
    scanf("%d",&n);
    getchar();
    char ch1[9],ch2[9];
    for(a=0;a<n;a++){
            scanf("%s %s",ch1,ch2);
            if((ch1=="Rock"&&ch2=="Scissors")||(ch1=="Scissors"&&ch2=="Paper")||(ch1=="Paper"&&ch2=="Rock")){
            printf("Player1\n");
                }
                else if((ch2=="Rock"&&ch1=="Scissors")||(ch2=="Scissors"&&ch1=="Paper")||(ch2=="Paper"&&ch1=="Rock")){
                        printf("Player2\n");
                }
                else if(ch1==ch2){
                        printf("Tie\n");
                }
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-29 08:58:34 | 显示全部楼层
你好,根据你提供的代码,函数无法正常输出的原因可能有以下几种情况:

1. 输入格式错误:请确保你的输入格式与代码中的要求一致。比如,如果你希望两个字符之间通过空格分隔,那么你需要在输入时加入空格。

2. 输入缓冲区未清空:在使用scanf读取整数后,如果后面还有要读取的字符,需要使用getchar()将缓冲区中的换行符读取掉。

3. 循环条件不正确:for循环中的循环条件可能有问题,导致循环无法正常结束。请检查循环条件是否正确。

请检查以上几点,并根据需要修改你的代码。如果你能提供更多的代码细节和具体的错误信息,我可以更具体地帮助你解决问题。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-29 10:17:21 | 显示全部楼层
1、在进行字符串操作的时候需要用特定的操作函数,在头文件<string.h>中,这里你需要将所有的 == 条件转换成strcmp函数
示例:将ch1 == ch2转换成strcmp(ch1,ch2) == 0
2、当进行多次scanf操作的时候,需要在之前使用getchar();
示例:while(getchar()!='\n');
          scanf("%s %s",ch1,ch2);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-29 10:22:02 | 显示全部楼层
渔村暮火 发表于 2023-11-29 10:17
1、在进行字符串操作的时候需要用特定的操作函数,在头文件中,这里你需要将所有的 == 条件转换成strcmp函数 ...

3、新使用的数组最好先进行初始化
示例:int ch1[9] = {0},ch2[9]={0};
或者使用memset函数
memset(ch1,0,9);
memset(ch2,0,9);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-29 17:16:55 | 显示全部楼层
简单的石头剪刀布游戏,它比较两个玩家的选择并决定谁是赢家或是否是平局
1、输入问题:你使用scanf("%s %s",ch1,ch2);来获取两个字符串。这可能会导致缓冲区溢出,因为%s会在遇到空格或换行符时停止读取。为了更安全地读取字符串,建议使用fgets。
2、比较问题:你使用==来比较字符串,这在C中并不安全。应该使用strcmp函数来比较字符串。
3、打印玩家问题:你使用printf("Player1\n");和printf("Player2\n");来打印赢家。然而,由于你的输入和比较逻辑,这两个打印语句可能不会正确地标识赢家。
#include <stdio.h>  
#include <string.h>  
  
int main() {  
    int n;  
    scanf("%d", &n);  
    getchar();  // consume newline left-over from previous input  
  
    char ch1[9], ch2[9];  
    for (int a = 0; a < n; a++) {  
        fgets(ch1, sizeof(ch1), stdin);  // read input safely  
        fgets(ch2, sizeof(ch2), stdin);  // read input safely  
  
        // Remove newline character from fgets reads  
        ch1[strcspn(ch1, "\n")] = 0;  
        ch2[strcspn(ch2, "\n")] = 0;  
  
        if (strcmp(ch1, "Rock") == 0 && strcmp(ch2, "Scissors") == 0) {  
            printf("Player1\n");  
        } else if (strcmp(ch1, "Scissors") == 0 && strcmp(ch2, "Paper") == 0) {  
            printf("Player1\n");  
        } else if (strcmp(ch1, "Paper") == 0 && strcmp(ch2, "Rock") == 0) {  
            printf("Player1\n");  
        } else if (strcmp(ch2, "Rock") == 0 && strcmp(ch1, "Scissors") == 0) {  
            printf("Player2\n");  
        } else if (strcmp(ch2, "Scissors") == 0 && strcmp(ch1, "Paper") == 0) {  
            printf("Player2\n");  
        } else if (strcmp(ch2, "Paper") == 0 && strcmp(ch1, "Rock") == 0) {  
            printf("Player2\n");  
        } else if (strcmp(ch1, ch2) == 0) {  
            printf("Tie\n");  
        } else {  
            printf("Invalid input! Both should be Rock, Scissors or Paper.\n");  
        }  
    }  
    return 0;  
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表