文件里的数字只输出数组中不重复的数字到数组,为什么是错的?看了半天没找到原因

求助!C++编程二维数组导入文件里的数字后输出的却是乱码。_百度知道
求助!C++编程二维数组导入文件里的数字后输出的却是乱码。
我的代码如下:
#include&fstream&
#include&iostream&
#include &iomanip&
int main()
ifstream in(&9_1.txt&);
//定义输入文件流
cout&&&从9_1.txt文件中导入的5*5列的矩阵为:&&&
int a[5][5],sum=0;
我有更好的答案
有2点:第一点:你的txt有1.1之类的值,就不应该定义成int a[5][5]第二点:你的txt文件放错了地方,导致程序运行的时候找不到,这一点跟你运行程序的方式有关,如果你是通过IDE启动的(例如Visisual Studio或者Visual C++),那么txt文件一般要放在工程的根目录,如果你是在命令行来执行,你在哪个目录执行exe,就放在exe同目录就好,所以其实不是乱码,而是没有读取到文件的时候,数组的值没有被程序初始化,是随机的数值代码修改成如下:#include&fstream&#include&iostream&#include &iomanip&int main(){ ifstream in(&9_1.txt&); & & //定义输入文件流 //加了判断处理 if(!in.is_open()) {
cout&&&打开文件失败&&&
return 1; } //---end 加了判断处理 cout&&&从9_1.txt文件中导入的5*5列的矩阵为:&&& //修改了变量类型 //int a[5][5],sum=0; double a[5][5],sum=0; //--- end //修改了变量类型 int i,j; for( i=0;i&5;i++) {
for( j=0;j&5;j++)
in&&a[i][j]; & &//把文件中的数据读取到程序中 } for( i=0;i&5;i++) {
for( j=0;j&5;j++)
cout&&setw(3)&&a[i][j]&&& &; } cout&& & & & &//屏幕上显示矩阵 //============================================================================== for( i=0;i&5;i++) & & & & & & & & & &//输出对角元素之和 {
for( j=0;j&5;j++)
if(j==i) sum+=a[i][j];
if(j==(5-1-i)) sum+=a[i][j]; } cout&&&上述5*5列的矩阵对角元素之和为:&&&sum&& return 0;}看我上面的代码,把txt放在不同的地方就会导致两种截然不同的运行结果
采纳率:78%
来自团队:
将int a[5][5]的int换成float
试了呢,还是不行。。
可能是9_1.txt文件路径的问题,你使用全路径试下.
in&&a[i][j];
//把文件中的数据读取到程序中这里不对
该怎么改呢?
#include&fstream&#include&iostream&#include &iomanip&int main(){ifstream in(&9_1.txt&);
//定义输入文件流
cout&&&从9_1.txt文件中导入的5*5列的矩阵为:&&&
float a[5][5],sum=0; /*修改*/int i,j;for( i=0;i&5;i++){for( j=0;j&5;j++)in&&a[i][j];
//把文件中的数据读取到程序中}for( i=0;i&5;i++){for( j=0;j&5;j++)cout&&setw(3)&&a[i][j]&&& &;cout&&
/*修改*/}cout&&
//屏幕上显示矩阵//==============================================================================for( i=0;i&5;i++)
//输出对角元素之和{for( j=0;j&5;j++)if(j==i) sum+=a[i][j];if(j==(5-1-i)) sum+=a[i][j];}cout&&&上述5*5列的矩阵对角元素之和为:&&&sum&&return 0;}
为您推荐:
其他类似问题
二维数组的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。stay foolish
文件中读取数字并排序输出到另一个文件中
编写java程序如下;
package com.cskaoyan.Day15_HomeW
import java.io.F
public class Java_3
public static void main(String[] args)
getFile("F:\\圣思源", "
public static void getFile(String path, String tab)
File file = new File(path);
if (file.exists())
File[] listFile = file.listFiles();
for (File file2 : listFile)
System.out.println(tab + file2.getName());
if (file2.isDirectory())
getFile(file2.getPath(), tab + "\t");
以上程序在运行时正常输出,但在将遍历的文件目录改为根盘符,比如
getFile("F:", "
扫描出一部分文件后出现报错
listfile.txt
小米2A合并MIUI7分区工具箱 V1.1.bat
小米2A合并MIUI7分区工具箱 V1.1.zip
QQMusicCache
DataTransformex
QQMusicAgent
QQMusicService
QQMusicSvr
QQMusic_Setup_1273-12.73.3461.0727
System Volume Information
Exception in thread "main" java.lang.NullPointerException
at com.cskaoyan.Day15_HomeWork.Java_3.getFile(Java_3.java:22)
at com.cskaoyan.Day15_HomeWork.Java_3.getFile(Java_3.java:27)
at com.cskaoyan.Day15_HomeWork.Java_3.main(Java_3.java:10)
放上以前编写的单独扫描目录下文件及文件夹的代码
public static void main(String[] args)
File file = new File("F:");
if (file.exists() && file.isDirectory())
File[] listFiles = file.listFiles();
for (File file2 : listFiles)
System.out.println(file2.getName());
正常输出,并没有报错,于是关注异常信息
java.lang.NullPointerException
于是我进一步在目录下新建一个空文件夹,再次遍历扫描,也没有报错,说明空文件夹并不是其报错野指针异常的原因。
查看此类的api文档,其报错原因如下几种,
当应用程序试图在需要对象的地方使用 null 时,抛出该异常,这种情况包括:
调用 null 对象的实例方法
访问或修改 null 对象的字段
将 null 作为一个数组,获得其长度
将 null 作为一个数组,访问或修改其时间片
将 null 作为 Throwable 值抛出
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用
关注 System Volume Information文件夹,
System Volume Information”是windows系统文件夹
是隐藏文件
中文名称可以翻译为“系统卷标信息”
这个文件夹里就存储着系统还原的备份信息
System Volume Information 文件夹是一个隐藏的系统文件夹
"系统还原"工具使用该文件夹来存储它的信息和还原点
修改其属性,重新用最初程序遍历文件发现程序运行正常
由此确定错误来自System Volume Information 文件夹的权限问题,修改程序循环调用,问题解决了
public static void getFile(String path, String tab)
File file = new File(path);
if (file.exists())
File[] listFile = file.listFiles();
if (listFile != null)
for (File file2 : listFile)
System.out.println(tab + file2.getName());
if (file2.isDirectory())
getFile(file2.getPath(), tab + "\t");
总结问题原因及API中解释结果如下
遍历到F盘下的System Volume Information目录时,
用户没有访问权限,所以调用listFile方法会返回null
API文档中关于listFile()的描述:
返回抽象路径名数组
这些路径名表示此抽象路径名表示的目录中的文件和目录
如果目录为空,那么数组也将为空
如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null
我不由得又滋生了两个问题(均已测试完成)
1.既然调用listFile方法会返回null,为什么示例程序2中调用file.getName()不会报错?
2.修改完System Volume Information目录权限之后,以可正常访问,示例程序1已正常运行,可为何在输出结果中找不到System Volume Information目录?
若有大神看到,求不吝解惑,谢谢
没有更多推荐了,如何读并提取TXT文件中的数据到数组中
第一次写文章,并且内容比较简单。主要背景是目前的CDIO需要提取出来自txt文件中的坐标,并且放入数组中进行自动建模。后者仍在进行,前者基本完成,虽然十分简单。主要思路是使用了fstream,并采用了stringstream进行字符转换。#include&iostream&
#include&fstream&
#include&sstream&
int main()
char line[512];//缓冲区
float pos[150][4];//转换数组区,从左至右分别是序号,X轴,Y轴,Z轴
ifstream ifile("D:/data.txt");
while(ifile.good())
ifile.getline(line,512);
//puts(line);//检验是否能正常输出
istringstream iss(line);//char向float转换
iss&&pos[n][0]&&pos[n][1]&&pos[n][2]&&pos[n][3];//读取数据
}代码比较简单,权当存档。参考:
没有更多推荐了,雷速体育发帖软件开发QQ
欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 2365 人关注过本帖
标题:请看一下我为什么将数组一初始化就出错,不初始化就是对的???
等 级:新手上路
帖 子:38
结帖率:66.67%
&&已结贴√
&&问题点数:20&&回复次数:18&&&
请看一下我为什么将数组一初始化就出错,不初始化就是对的???
#include &stdio.h&
void sort(int *a,int n)
&&& int i,j,k,t;
&&& for(i=0;i&n-1;i++)
&&&&&&&&k =
&&&&&&&&for(j=i+1;j&n;j++)
&&&&&&&&&&&&if(*(a+k)&*(a+j))
&&&&&&&&&&&&&&& k=j;
&&&&&&&&if(k!=i)
&&&&&&&&&&&&t = *(a+i);
&&&&&&&&&&&&*(a+i) = *(a+k);
&&&&&&&&&&&&*(a+k) =
int&&max(int *a,int n)
&&& int i,
&&& for(i=0;i&n;i++)
&&&&&&&&if(*(a+max)&*(a+i))
&&&&&&&&&&&&max =
&&& return (a[max]);
int main()
&&& int i,n;
&&& printf(&Please input the number:\n&);
&&& scanf(&%d&,&n);
&&& int arr[n]={0};
&&& for(i=0;i&n;i++)
&&&&&&&&printf(&Please input %dth number:\n&,i+1);
&&&&&&&&scanf(&%d&,&arr[i]);
&&& printf(&The input number is :\n&,n);
&&& for(i=0;i&n;i++)
&&&&&&&&printf(&%d &,arr[i]);
&&& printf(&\n&);
&&& sort(arr,n);
&&& printf(&Form big to small order is :\n&);
&&& for(i=0;i&n;i++)
&&&&&&&&printf(&%d &,arr[i]);
&&& printf(&\n&);
&&& int maxnum = max(arr,n);
&&& printf(&The max number is:\n&);
&&& printf(&%5d\n&,maxnum);
搜索更多相关主题的帖子:
等 级:新手上路
帖 子:38
这是将一个不确定个数的数组排序的函数,将数组初始化就会出现错误,不初始化却是正确的,这是为什么?
等 级:新手上路
帖 子:38
max.c:38:2: error: variable-sized object may not be initialized
max.c:38:2: warning: excess elements in array initializer
max.c:38:2: warning: (near initialization for ‘arr’)
这是现实的错误信息和警告。。
来 自:游鱼潜水
等 级:黑侠
帖 子:202
专家分:542
呃,我记得课本有这么一条~~
在定义数组时:类型说明符 数组名 [常量表达式]
例如 int a[10];&&&这里面的10不能是变量,例如你的n 。。。
如果要用不知道多少个字符的数组,那么需要分配内存单元 用malloc函数,然后引用指针~~
未知令人期待!
来 自:星星
等 级:蝙蝠侠
帖 子:222
专家分:916
楼上说的是对的,不能让变量作为数组长度。里边只能是常量或者常量表达式
。。。。。。。。。。。
等 级:新手上路
帖 子:38
回复 5楼 ljx小子
但是为什么对数组不初始化,程序运行是正确的?
来 自:游鱼潜水
等 级:黑侠
帖 子:202
专家分:542
不清楚为什么,我尝试了一个测试:
#include&stdio.h&
void main()
&&& int n=5,
&&& int a[n]={0};
&&& /*对数组定义声明时候,常量表达式的应用。*/
&&& for(i=0;i&n;i++)
&&&&&&&&a[i]=i;
&&& for(i=0;i&n;i++)
&&&&&&&&printf(&%-5d&,a[i]);
&&& putchar(10);
如果对数组常量表达式应用变量:int a[n]={0}; 程序编译不过去:
--------------------Configuration: 7 - Win32 Debug--------------------
Compiling...
E:\yangm\学习\编程\C程序\13.12.22\程序纠错\7.c(5) : error C2057: expected constant expression
E:\yangm\学习\编程\C程序\13.12.22\程序纠错\7.c(5) : error C2466: cannot allocate an array of constant size 0
执行 cl.exe 时出错.
7.obj - 1 error(s), 0 warning(s)
未知令人期待!
来 自:游鱼潜水
等 级:黑侠
帖 子:202
专家分:542
呃啊,好吧你当我手贱了。。。。 嗯,这里:
int&&max(int *a,int n)
&&& int i,
&&& for(i=0;i&n;i++)
&&&&&&&&if(*(a+max)&*(a+i))
&&&&&&&&&&&&max =
&&& return (a[max]);
这是寻找数组里面的最大值的函数,i的值在并没有赋值的情况下赋值给了max(i是什么不知道),这就导致*(a+max)的值是一个不确定数字。有可能比数组每个数字都大,于是里面的选择语句就没有判定为真而执行max=i,于是max的值是一个不确定的数字,那么返回值也是一个不确定的数字,这并不是所期望的结果。
你当我无聊好了。。。
未知令人期待!
等 级:新手上路
帖 子:38
以下是引用神机军师在 22:44:57的发言:
呃啊,好吧你当我手贱了。。。。 嗯,这里:
int&&max(int *a,int n)
&&& int i,
&&& for(i=0;i
说法是对的,那就应该给max赋初值0,但是如果是max=i,在程序执行过程中,结果为什么并没有影响?
等 级:新手上路
帖 子:38
回复 7楼 神机军师
&&& int i,n;
&&& printf(&Please input the number:\n&);
&&& scanf(&%d&,&n);
&&& int arr[n]={0};
我的也是这种情况,先是输入n的值,和你那个直接给n 赋值一样的效果,但是就是不明白为什么会出错,但是对数组不进行初始化的时候就是对的。。
版权所有,并保留所有权利。
Powered by , Processed in 0.043379 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved折半查找------在一个升序的有序数组中查找某个具体的数字
非递归法:
#include &stdio.h&
#include &stdlib.h&
#define number 6
int binsearch(int x, int *arr, int left, int right);
int main()
int x = 0, inter = 0;
int arr[number] = { 1, 5, 12, 36, 45, 98 };
* printf(&请输入可查找到的数:& &);
* for (int i = 0; i & sizeof(arr) / sizeof(arr[0]);i++)
scanf_s(&%d&, &arr[i]);
printf(&请输入您要查找的数:& &);
scanf_s(&%d&, &x);
inter = binsearch(x, arr, 0, sizeof(arr) / sizeof(arr[0]) - 1);
if (inter == -1)
printf(&没有找到你要查找的数!\n&);
printf(&您要查找的数是%d,且位置为%d\n&, x, inter);
system(&pause&);
int binsearch(int x, int *arr, int left, int right)
int mid = 0;
while (left &= right)
mid = left - (left - right) / 2;
if (x == *(arr + mid)) /*找到了*/
else if (x & *(arr + mid)) /*偏大*/
right = mid - 1;
left = mid + 1;
return -1;
/*没找到*/
递归法(不能输出要查找的数字在原数组中的位置):
#include &stdio.h&
#include &stdlib.h&
int binsearch(int x, int *arr, int n);
int main()
int x = 0, inter = 0;
int arr[] = { 1, 5, 12, 36, 48, 98 };
printf(&请输入您要查找的数:& &);
scanf_s(&%d&, &x);
inter = binsearch(x, arr, sizeof(arr)/sizeof(arr[0]));
if (inter == -1)
printf(&没找到您要查找的数!\n&);
printf(&找到了您要查找的数%d\n&, x);
system(&pause&);
int binsearch(int x, int *arr, int n)
int mid = (n - 1) / 2;
if (n &= 0)
return -1;
else if (x == *(arr + mid)) /*找到了*/
else if(x & *(arr + mid))
/*有点大 */
return binsearch(x, arr+mid-1, mid);/*下一次数组长度为mid */
else if (x & *(arr + mid)) /*有点小*/
return binsearch(x, arr+mid+1, mid);

我要回帖

更多关于 vb怎么在数组中输出某些数字 的文章

 

随机推荐