0

我即将完成编写一个程序来交换输入到程序中的两个单词。如果我输入“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]); 
    } 
} 
4

5 回答 5

3
scanf("%s", &str[59]);

将输入写入分配空间的末尾。使用第一个元素的地址:

scanf("%s", str);

但这会给你第一个词,所以要么这样做:

scanf("%s %s", str1, str2); // str1, str2 are arrays

或使用 fgets:

fgets(str, 59, stdin);
于 2013-04-15T23:06:56.250 回答
1

而不是使用scanf("%s", &str[59]);,你可以使用gets(str);

它工作得很好......

于 2014-07-15T18:04:59.743 回答
0

这种编写函数的方式有点难以阅读。我不确定您在什么情况下编写它,但另一种解决方案是用一个标记(在这种情况下是一个空格)分割输入字符串,然后以相反的顺序打印出两个字符串。strtok()可以在此处找到该函数的示例。

像这样的东西:

char str[] ="billy bob";
char * firstToken;
char * secondToken
firstToken = strtok(str, " ");
secondToken = strtok(NULL, " ");
printf("%s %s", secondToken, firstToken);
于 2013-04-15T23:12:09.633 回答
0

这是错误的:

 scanf("%s", &str[59]);  
 //^not reading the str, str[59] is even out of bound

应该:

scanf("%s", str);
于 2013-04-15T23:06:18.653 回答
-1

您将第一个地址传递str给scanf。更改&str[59]str

于 2013-04-15T23:06:28.440 回答