读取字符到数组的程序 有些有关问题麻烦帮看一下
读取字符到数组的程序 有些问题麻烦帮看一下
读取一行输入,并且反向打印输入,用具用%c的scanf()从输入中一次读取一个字符到数组 但是好像读取那段不正常 有哪位朋友给解释一下呗
------解决方案--------------------
bug:采集的数据在str[i],然后while判断是尚未采集数据的str[i + 1],这是程序问题所在。估计,你的while循环“几乎”是个死循环(意外遇到\n,可能死不了),而且可能导致数组越界!
其它小问题,简单罗列一下:
1.ch木有使用
2.循环进入的时候,如果str[0] == \n,那么程序无法采集数据
3.str[size]是结束符,没有必要输出,从size-1开始吧
4.下标索引习惯使用i,在这里采集完数据之后,i也没有再使用,没有必要再重新定义个下标索引a
5.如果你连续输入》256字符,while循环将导致数组越界
that's all!over!
------解决方案--------------------
读取一行输入,并且反向打印输入,用具用%c的scanf()从输入中一次读取一个字符到数组 但是好像读取那段不正常 有哪位朋友给解释一下呗
#include <stdio.h>
#include <string.h>
int main()
{
char str[255],ch;
int i =0;
while(str[i] != '\n')
{
scanf("%c",&str[i]);
i++;
}
str[i] = '\0';
int size = strlen(str);
for(int a = size; a >= 0;a--)
{
printf("%c",str[a]);
}
printf("\n");
return 0;
}
------解决方案--------------------
bug:采集的数据在str[i],然后while判断是尚未采集数据的str[i + 1],这是程序问题所在。估计,你的while循环“几乎”是个死循环(意外遇到\n,可能死不了),而且可能导致数组越界!
其它小问题,简单罗列一下:
1.ch木有使用
2.循环进入的时候,如果str[0] == \n,那么程序无法采集数据
3.str[size]是结束符,没有必要输出,从size-1开始吧
4.下标索引习惯使用i,在这里采集完数据之后,i也没有再使用,没有必要再重新定义个下标索引a
5.如果你连续输入》256字符,while循环将导致数组越界
that's all!over!
------解决方案--------------------
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。