字符串排序 很奇怪的异常
字符串排序 很奇怪的错误
题目要求就是先输入一个表示数量的数字,然后输入几个字符串,排序后输出来,按理来说不难,但我这个写出来比如输入3,然后我输入两个字符串回车准备输入第三个字符串时exe就出错关闭了,而且修改后想再编译运行会提示returned 1 value什么的,如果不重新开机连exe都删不了,求大神解救
#include<stdio.h>
#include<string.h>
int main() {
int n, i, j;
char STRING[1000][1000];
char * PSTRING[1000];
char * TEMP;
scanf("%d", &n);
for (i = 0; i < n; i++) {
gets(STRING[i]);
PSTRING[i] = STRING[i];
}
for (j = 0; j < n-1; j++)
for (i = 0; i < n-j-1; i++) {
if (strcmp(PSTRING[i], PSTRING[i+1]) > 0)
TEMP = PSTRING[i];
PSTRING[i] = PSTRING[i+1];
PSTRING[i+1] = TEMP;
}
for (i = 0; i < n; i++)
puts(PSTRING[i]);
return 0;
}
------解决思路----------------------
第一个scanf输入了字符串以后,按回车键,此时把一行字符连同换行符一起送入缓冲区,缓冲区检测到有换行符,就把一行字符送入系统内存,送给了n,而换行符'\n'还留在缓冲区里,换行符(line feed)ASCII码是10,这个时候并没清除缓冲区,
再用一个gets时,gets就会先检查缓冲区,发现里头有个换行符,就把空字符串发给了STRING[i]。
需要在gets前面加上flushall();或fflush(stdin);,冲掉换行符。
------解决思路----------------------
两个地方
第一: scanf("%d", &n);之后,添加“fflush(stdin);”刷新输入缓冲,这样你就可以输入n次字符串了
第二: for (j = 0; j < n-1; j++)
for (i = 0; i < n-j-1; i++) {
这个排序你写错了。好好调试一下吧。
题目要求就是先输入一个表示数量的数字,然后输入几个字符串,排序后输出来,按理来说不难,但我这个写出来比如输入3,然后我输入两个字符串回车准备输入第三个字符串时exe就出错关闭了,而且修改后想再编译运行会提示returned 1 value什么的,如果不重新开机连exe都删不了,求大神解救
#include<stdio.h>
#include<string.h>
int main() {
int n, i, j;
char STRING[1000][1000];
char * PSTRING[1000];
char * TEMP;
scanf("%d", &n);
for (i = 0; i < n; i++) {
gets(STRING[i]);
PSTRING[i] = STRING[i];
}
for (j = 0; j < n-1; j++)
for (i = 0; i < n-j-1; i++) {
if (strcmp(PSTRING[i], PSTRING[i+1]) > 0)
TEMP = PSTRING[i];
PSTRING[i] = PSTRING[i+1];
PSTRING[i+1] = TEMP;
}
for (i = 0; i < n; i++)
puts(PSTRING[i]);
return 0;
}
------解决思路----------------------
第一个scanf输入了字符串以后,按回车键,此时把一行字符连同换行符一起送入缓冲区,缓冲区检测到有换行符,就把一行字符送入系统内存,送给了n,而换行符'\n'还留在缓冲区里,换行符(line feed)ASCII码是10,这个时候并没清除缓冲区,
再用一个gets时,gets就会先检查缓冲区,发现里头有个换行符,就把空字符串发给了STRING[i]。
需要在gets前面加上flushall();或fflush(stdin);,冲掉换行符。
------解决思路----------------------
两个地方
第一: scanf("%d", &n);之后,添加“fflush(stdin);”刷新输入缓冲,这样你就可以输入n次字符串了
第二: for (j = 0; j < n-1; j++)
for (i = 0; i < n-j-1; i++) {
这个排序你写错了。好好调试一下吧。