该程序旨在返回表S1中表格s2中字符的位置。如果失败,它将返回-1。
#include <stdio.h>
#include <stdlib.h>
#define RANGE 10
int any(char [], char []);
int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
printf("%d", any(s1, s2));
}
int any(char s1[], char s2[])
{
int i,j;
for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
// for debug
printf("\n%s", s1[i]);
printf("\n%s", s2[j]);
//
if(s1[i]==s2[j])
return i;
}
return -1;
}
在我看来,比较表格中的字符会出现问题。
在这种情况下,程序应该返回-1:
答案 0 :(得分:1)
代码存在以下问题:
(1)变量 i 和 j 在代码中未初始化,可能导致崩溃:
int i,j;
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
(2)当读取输入时,代码还需要递增 i 和 j 的值。如果不这样做,将导致所有输入写入s1 [0] / s2 [0]:
while( (s1[i]=getchar()) != EOF);
while( (s2[j]=getchar()) != EOF);
(3)终止^ Z字符应该从 s1 / s2 中删除(您可能还想删除0x0A(换行符))。
(4)调试语句输出字符,而不是字符串,因此printf()格式字符串应为“\ n%c”,而不是“\ n” %S”。
清理代码会提供以下工作版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RANGE 10
int any(char [], char []);
int main()
{
char s1[RANGE];
char s2[RANGE];
int i,j;
i = j = 0;
while( (s1[i++]=getchar()) != EOF);
s1[i-2] = 0;
while( (s2[j++]=getchar()) != EOF);
s2[j-2] = 0;
printf("%d", any(s1, s2));
}
int any(char s1[], char s2[])
{
int i,j;
for(i=0;s1[i]!='\0';i++)
for(j=0;s2[j]!='\0';j++)
{
// for debug
printf("\n%c", s1[i]);
printf("\n%c", s2[j]);
//
if(s1[i]==s2[j])
return i;
}
return -1;
}
'aaaa ^ Z'/'bbbb ^ Z'的输出是:
答案 1 :(得分:0)
// for debug
printf("\n%s", s1[i]);
printf("\n%s", s2[j]);
%s表示参数是一个字符串(也就是char *)但实际上只是传递了一个char。 试试这个:
// for debug
printf("\n%c", s1[i]);
printf("\n%c", s2[j]);