c语言问题求助

Nujabes97 2018-10-26 10:12:55
#include<stdio.h>
#include<string.h>
#define MAX 1000

int substr ( char dst[], char src[], int start, int len );

int main()
{
int start, len, sum;
char src[MAX];
//char src[MAX] = "asdf";
char dst[MAX];
int ch;
int i = 0;

printf( "请输入start:" );
scanf( "%d", &start );
printf( "请输入len:" );
scanf( "%d", &len );

while( ( ch = getchar() ) != EOF )
{
src[i] = ch;
i++;
}
sum = substr( dst, src, start, len );

printf( "%s\n", src );
printf( "%s\n", dst );
printf( "%d", sum );

}

int substr( char dst[], char src[], int start, int len )
{
int i;

if( start >= strlen(src) && start < 0 && len < 0 )
dst == NULL;

for( i=0;i<len;i++ )
{
if( src[start] != '\n' )
dst[i] = src[start];
start++;
}
return strlen(dst);
}

如果先写
while( ( ch = getchar() ) != EOF )
{
src[i] = ch;
i++;
}
再写
printf( "请输入start:" );
scanf( "%d", &start );
printf( "请输入len:" );
scanf( "%d", &len );

为什么结果会不一样?
...全文
141 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-10-27
  • 打赏
  • 举报
回复
因为先输入start和len之后,'\n'还残留在输入缓存里,while循环收到的第一个字符ch就是'\n'。因此src[0]就是'\n'。解决办法,就是scanf输入start和len之后加一条语句: getchar();这条语句要在while之前。或者在while中如此处理

while( ( ch = getchar() ) != EOF )
{
if (ch == '\n')
continue;
src[i] = ch;
i++;
}
みしつかん 2018-10-27
  • 打赏
  • 举报
回复
先写while循环你的ch没有get到任何东西,因为是先执行的循环,循环退出后你才输入。所以要先输入再用循环get到你输入的。
而且你这个有些问题,数组没有初始化,还要数组位置有小错误,下面贴出了我运行过的代码。

#include<iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
using std::string;
//#define MAX 1000
int substr(char dst[], char src[], int start, int len);

int main()
{
int start, len, sum;
char src[5] = {0,0,0,0,0}; //初始化为0,注意输入的时候只输5个字符,因为数组大小是5,这个可以随意改。
char dst[5] = { 10,10,10,10,10 }; //10代表回车‘\n’
int ch;
int i = 0;

cout << "请输入start:" << endl;
cin>>start;
cout << "请输入len:" << endl;
cin >> len;

while ((ch = getchar()) != EOF)
{
if (ch != '\n')
{
src[i] = (char)ch;
i++;
}
}
sum = substr(dst, src, start, len);

cout << src << endl;
cout << dst << endl;
cout << sum << endl;
getchar();

}

int substr(char dst[], char src[], int start, int len)
{
int j;

if (start >= strlen(src) && start < 0 && len < 0)
dst == NULL;

for (j = 0; j<len; j++)
{
if (src[start-1] != '\n') //数组从0开始的
{
dst[j] = src[start-1];
start++;
}
}
return len; //代表了dst中元素的个数
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧