C语言程序纠错

C语言程序纠错,第1张

#include<stdio.h>

void sort(int *,int) //函数声明时类型保持一致

int main()

{

int a[20]={0},i,n

printf("输入要输入数据的个数:\n")

scanf("%d",&n)

printf("输入数组中元素:\n")

for(i=0i<ni++)

scanf("%d",&a[i])

printf("输出排列好的数组:\n")

sort (a,n)

for(i=0i<ni++)

printf("%5d",a[i])

printf("\n")

}

void sort(int a[],int n)

{

int i,j,k,t

for(i=0i<ni++)

{

k=i

for(j=0j<nj++)

{

if(a[j]<a[k])

{

k=j

t=a[k]

a[k]=a[i]

a[i]=t

}

}

}

}

调用时不用加入函数返回值类型,顺便调试了一下程序,你是打算倒序排列后输出结果,在sort函数里面if 判断语句成立时应该加大括号,因为下面的3句都是if 需要执行的,还有for 也要加大括号,只有当for 、if 的语句体只有一句时才能省略大括号。。。

#include <stdio.h>

#include <stdlib.h>

#define SIZE 20 /* 查找单词字符和输入替换单词少于20 */

#define MAXLEN 10000 /* 文章字符不大于10000 */

int main(void)

{

FILE *fp

int i, j

int flag/* 用于标记匹配单词 */

int countFlag/* 用于检查匹配计数 */

int countOne = 0/* 记录未改文章字符个数 */

int countTwo = 0/* 记录改后文章字符个数 */

char keyWords[SIZE]/* 查找单词 */

char copyWords[SIZE]/* 替换单词 */

char strOne[MAXLEN]/* 将未改文章的所有字符储存在里面 */

char strTwo[MAXLEN]/* 将改后文章的所有字符储存在里面 */

printf("请输入要查找的单词: ")

gets(keyWords)

printf("请输入要替换的单词: ")

gets(copyWords)

if (NULL == (fp = fopen("E:\\C++\\123.txt", "r")))/* 读文件 */

{

printf("文件打开失败!\n")

exit(0)

}

//用于测试代码找错

printf("打开成功!\n")

/*while (!feof(fp))// 读文件

{

//strOne[countOne++] = fgetc(fp)

putchar(fgetc(fp))   //用于测试

countOne++

}

printf("\n")

*/

while (!feof(fp))/* 读文件 */

{

strOne[countOne] = fgetc(fp)

countOne++

}

printf("\n")

//用于测试

countOne--/* 减去最后一个文件结束字符 */

printf("文章未改时的字符数是%d个!\n",countOne) //用于测试,显示字符数

/*

for(i = 0i <countOnei++)  //测试字符是否写入到数组中去

{

printf("%c",strOne[i])

}

*/

for (i = 0i <countOnei++)

{

if (keyWords[0] == strOne[i])/* 判断查找单词第一个字符是否匹配 */

{

if ((' ' == strOne[i-1]) || ('\n' == strOne[i-1]) || (0 == i))/* 1.检查单词前的一个字符 */

{

flag = 1

countFlag = i + 1

for (j = 1keyWords[j]!='\0'j++)

{

if (keyWords[j] != strOne[countFlag++])/* 是否匹配 */

{

flag = 0

break

}

}

if ((' ' == strOne[countFlag]) || ('\n' == strOne[countFlag]) || (EOF == strOne[countFlag]))/* 2.检查单词后的一个字符 */

{

if (1 == flag)/* 若匹配,则进行拷贝 */

{

i = countFlag-1

for (j = 0copyWords[j]!='\0'j++)

{

strTwo[countTwo++] = copyWords[j]

}

}

}

else/* 另外 3*/

{

strTwo[countTwo++] = strOne[i]

}

}

else/* 另外 2 */

{

strTwo[countTwo++] = strOne[i]

}

}

else/* 另外 1*/

{

strTwo[countTwo++] = strOne[i]

}

}

fclose(fp)

if (NULL == (fp = fopen("E:\\C++\\123.txt", "w")))/* 写入文件 */

{

printf("文件打开失败!\n")

exit(1)

}

for (i = 0i <countTwoi++)/* 写入文件 */

{

fputc(strTwo[i], fp)

}

printf("写入成功!\n")

fclose(fp)

system("pause")

return 0

}

输入65时,只有字符'6'被接收,'5’被忽略,由于c1

=

6,满条件循环语句的循环条件,接下来进入while循环,程序处于等待键盘输入状态........................。

事实上,该程序用于读入非大写英文字母的输入。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8113837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存