1215787625 发表于 2023-11-29 08:58:23

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

#include<stdio.h>
int main(){
    int a,b,n;
        int s1=0,s2=0;
    scanf("%d",&n);
    getchar();
    char ch1,ch2;
    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;
}

FishC_GPT 发表于 2023-11-29 08:58:34

你好,根据你提供的代码,函数无法正常输出的原因可能有以下几种情况:

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

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

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

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

渔村暮火 发表于 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);

渔村暮火 发表于 2023-11-29 10:22:02

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

3、新使用的数组最好先进行初始化
示例:int ch1 = {0},ch2={0};
或者使用memset函数
memset(ch1,0,9);
memset(ch2,0,9);

六翻了 发表于 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, ch2;
    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 = 0;
      ch2 = 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;
}
页: [1]
查看完整版本: 为什么此函数无法正常输出