为什么按回车不能结束输入呢? 小白求解答

Sheldon_ 2014-09-19 03:37:18
void Create_SqList(SqList &L)
{
int n,i=0;
int *newBase;
printf("请输入顺序表元素:\n");
scanf("%d",&n);
while(sizeof(n))
{
if(i>=L.listsize) //自定义顺序表大小超过初始化大小
{
newBase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
//为初始顺序表以LISTINCREMENT大小重新增加存储空间
if(!newBase)exit(OVERFLOW);
L.elem=newBase;
L.listsize+=LISTINCREMENT;
}
L.elem[i++]=n;
}
L.length=i;
printf("输入的顺序表元素:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
...全文
496 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
上面说的越界不是真正意义上的越界。你可能申请的是有1000个元素的数组,但是你真正用到的只有前8个。但你在使用的时候用到了第9个元素,这个元素的值就会是的个大数字(如果你没初始化过数组)。
  • 打赏
  • 举报
回复
从你那个-842150451来看,是你在操作数组的过程中越界了,好好检查下操作数组的代码。你每次运行的这个值应该是不固定的。但一般都是很大的负数或正数。
hustcyb 2014-09-23
  • 打赏
  • 举报
回复
scanf返回输入成功的参数个数,对于scanf("%d", &n)要么返回1(输入成功),要么返回0(包含空数字字符)或EOF(windows环境CTRL + Z, linux环境CTRL + D)
hustcyb 2014-09-23
  • 打赏
  • 举报
回复
sizeof(n) = 4(32位机器),死循环了,下面代码输入非数字或空白字符即可退出循环

while (scanf("%d", &n) == 1)
{
...
}
「已注销」 2014-09-22
  • 打赏
  • 举报
回复
ctrl + z试试阿
Sheldon_ 2014-09-20
  • 打赏
  • 举报
回复
引用 6 楼 hhhhhhhhhhkkkkkkkkkk 的回复:

我用的VC6.0的。必须按Ctrl+Z才能结束,而且我在建立两个线性表后按升序合并后倒数第二个总会出现一个这个
赵4老师 2014-09-19
  • 打赏
  • 举报
回复
按Ctrl+C或Ctrl+Break结束。
赵4老师 2014-09-19
  • 打赏
  • 举报
回复
Format Specification Fields: scanf and wscanf Functions A format specification has the following form: %
  • [width] [{h | l | I64 | L}]type The format argument specifies the interpretation of the input and can contain one or more of the following: White-space characters: blank (' '); tab ('\t'); or newline ('\n'). A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non–white-space character. One white-space character in the format matches any number (including 0) and combination of white-space characters in the input. Non–white-space characters, except for the percent sign (%). A non–white-space character causes scanf to read, but not store, a matching non–white-space character. If the next character in stdin does not match, scanf terminates. Format specifications, introduced by the percent sign (%). A format specification causes scanf to read and convert characters in the input into values of a specified type. The value is assigned to an argument in the argument list. The format is read from left to right. Characters outside format specifications are expected to match the sequence of characters in stdin; the matching characters in stdin are scanned but not stored. If a character in stdin conflicts with the format specification, scanf terminates, and the character is left in stdin as if it had not been read. When the first format specification is encountered, the value of the first input field is converted according to this specification and stored in the location that is specified by the first argument. The second format specification causes the second input field to be converted and stored in the second argument, and so on through the end of the format string. An input field is defined as all characters up to the first white-space character (space, tab, or newline), or up to the first character that cannot be converted according to the format specification, or until the field width (if specified) is reached. If there are too many arguments for the given specifications, the extra arguments are evaluated but ignored. The results are unpredictable if there are not enough arguments for the format specification. Each field of the format specification is a single character or a number signifying a particular format option. The type character, which appears after the last optional format field, determines whether the input field is interpreted as a character, a string, or a number. The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign (%) is followed by a character that has no meaning as a format-control character, that character and the following characters (up to the next percent sign) are treated as an ordinary sequence of characters, that is, a sequence of characters that must match the input. For example, to specify that a percent-sign character is to be input, use %%. An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored.
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
应该是你编译器的问题。刚才我试了一下是可以的。
  • 打赏
  • 举报
回复
你用的什么编译器?
Sheldon_ 2014-09-19
  • 打赏
  • 举报
回复
引用 1 楼 hhhhhhhhhhkkkkkkkkkk 的回复:
能的啊,不过你的循环是死的。
可是我这不能啊,这样也不行 while(scanf("%d",&n)!='\n')
Sheldon_ 2014-09-19
  • 打赏
  • 举报
回复
可是我这不能啊,这样也不行

  while(scanf("%d",&n)!='\n')
  • 打赏
  • 举报
回复
能的啊,不过你的循环是死的。

70,022

社区成员

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

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