我即将完成编写程序,将两个单词交换为一个程序。如果我输入“Billy Bob”,输出将是“@ \ 300_ \ 377”这样的奇怪......我相信我的scanf有问题但不太确定。这是我到目前为止所拥有的......
{ int i,j,l;
char str[59];
printf("Enter the string\n");
scanf("%s", &str[59]);
l=strlen(str);
for(i=l-1; i>=0; i--)
{ if(str[i]==' ')
{ for(j=i+1; j<l; j++)
printf("%c",str[j]);
printf(" ");
l=i;
}
if(i==0)
{ printf(" ");
for(j=0; j<l; j++)
printf("%c",str[j]);
}
}
答案 0 :(得分:3)
scanf("%s", &str[59]);
将输入写入分配空间的末尾。使用第一个元素的地址:
scanf("%s", str);
但这会给你第一个字,所以要么:
scanf("%s %s", str1, str2); // str1, str2 are arrays
或使用fgets:
fgets(str, 59, stdin);
答案 1 :(得分:1)
您可以使用scanf("%s", &str[59]);
。
gets(str);
完美无缺......
答案 2 :(得分:0)
这是错误的:
scanf("%s", &str[59]);
//^not reading the str, str[59] is even out of bound
应该是:
scanf("%s", str);
答案 3 :(得分:0)
编写函数的方式有点难以阅读。我不确定你在写什么情况,但是另一种解决方案是通过令牌分割输入字符串,在这种情况下是一个空格,并以相反的顺序打印出两个字符串。可以找到函数strtok()
的示例here。
这样的事情:
char str[] ="billy bob";
char * firstToken;
char * secondToken
firstToken = strtok(str, " ");
secondToken = strtok(NULL, " ");
printf("%s %s", secondToken, firstToken);
答案 4 :(得分:-1)
您将str
之后的第一个地址传递给scanf。将&str[59]
更改为str
。